Vous devriez utiliser UTF-8 jusqu'au bout. Assurez-vous que:
votre connexion à la base de données est UTF-8 (en utilisant mysql_set_charset
);
les pages que vous envoyez sont marquées comme UTF-8 (<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
); Lorsque vous générez des chaînes à partir de la base de données, vous les codez au format HTML en utilisant htmlspecialchars()
et non htmlentities()
.
htmlentities
HTML code tous les caractères non-ASCII, et par défaut suppose que vous passez dans ce octets ISO-8859-1. Donc, si vous le transmettez “
encodé en UTF-8 (octets 0xE2, 0x80, 0x9C), vous obtiendrez “
, au lieu de “
ou “
. Cela peut être corrigé en transmettant utf-8
comme argument optionnel $charset
.
Cependant, il est généralement plus facile d'utiliser simplement htmlspecialchars()
à la place, car cela laisse des caractères non-ASCII seuls, comme des octets bruts au lieu de références d'entité HTML. Il en résulte une sortie de page plus petite, donc préférable tant que vous êtes sûr que le code HTML que vous produisez conserve ses informations charset (sur lesquelles vous pouvez généralement compter, sauf dans le contexte comme l'envoi d'extraits HTML dans un courrier ou quelque chose).
htmlspecialchars()
n'ont un argument $charset
en option aussi, mais la mise à utf-8
n'est pas critique, car cela aboutit à aucun changement de comportement sur la valeur par défaut ISO-8859-1 charset. Si vous produisez des sorties dans des codages multi-octets old-school comme Shift-JIS, vous devez vous soucier de paramétrer correctement cet argument, mais aujourd'hui c'est assez rare car la plupart des gens sensés utilisent UTF-8 de préférence.
quel encodage devrais-je utiliser? – Arshdeep