PHP: traiter les caractères spéciaux avec iconv

Je ne comprends toujours pas comment iconv œuvres.

Par exemple

$string = "Löic & René";
$output = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string); 

Je comprends,

Avis: iconv () [fonction.iconv]: Détecté un caractère illégal dans l'entrée la chaîne dans la...

$string = "Löic"; ou $string = "René";

Je comprends,

Avis: iconv() [function.iconv]: détecté un caractère multioctet incomplet dans la chaîne d'entrée dans.

Je ne reçois rien avec $string = "&";

Il y a deux ensembles de sorties différentes dont j'ai besoin pour les stocker dans les deux différents colonnes dans la table de ma base de données,

  1. J'ai besoin de convertir Löic & René en Loic & Rene à des fins d'url propre.

  2. J'ai besoin de les garder comme ils sont - Löic & René, comme Löic & René, puis seulement de les convertir avec htmlentities($string, ENT_QUOTES); lors de l'affichage sur ma page html.

J'ai essayé avec certaines des suggestions dans php.net ci-dessous, mais ne fonctionnent pas encore,

J'ai eu une situation où j'avais besoin de caractères translittérés, mais les autres ignorés (pour bizarre diacritiques comme Ayn ou hamza). Ajouter / / TRANSLIT / / IGNORE semblait faire l'affaire pour moi. Il translittère tout ce qui peut être translittéré, mais jette ensuite des choses qui ne peuvent pas l'être.

Donc:

$string = "ʿABBĀSĀBĀD";

echo iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $string);
// output: [nothing, and you get a notice]

echo iconv('UTF-8', 'ISO-8859-1//IGNORE', $string);
// output: ABBSBD

echo iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $string);
// output: ABBASABAD
// Yay! That's what I wanted!

Et un autre,

Andries Seutens 07-Nov-2009 07:38
When doing transliteration, you have to make sure that your LC_COLLATE is properly set, otherwise the default POSIX will be used.

To transform "rené" into "rene" we could use the following code snippet:
setlocale(LC_CTYPE, 'nl_BE.utf8');

$string = 'rené';
$string = iconv('UTF-8', 'ASCII//TRANSLIT', $string);

echo $string; // outputs rene

Comment puis-je réellement les résoudre?

Merci.

Modifier:

C'est le fichier source que je teste le code,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" class="no-js">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<?php
$string = "Löic & René";
$output = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string); 
?>
</html>
26
demandé sur Rais Alam 2011-01-25 17:29:54

2 réponses

Et avez-vous enregistré votre fichier source en encodage UTF-8? Si non (et je suppose que vous ne l'avez pas fait puisque cela produira l'erreur" caractère multioctet incomplet"), alors essayez d'abord.

13
répondu wimvds 2011-01-25 14:41:00
$clean = iconv('UTF-8', 'ASCII//TRANSLIT', utf8_encode($s));
20
répondu Riccardo 2012-02-09 00:03:29