84mickael a écrit :
Est-ce que des problèmes liés à l'utilisation d'UTF-8 persistent ?
* traitements différents avec PHP (strlen...)
Oui. Un e accent aïgu encodé en UTF-8 prend deux octets (d’où le terme d’encodage multi-octets). Avec le "é" en utf-8 dans les exemples suivants :
echo strlen('é'); // renverra 2
$a = substr('é', 0, 1); // va "couper" le é en deux, il ne reste plus que le premier octet le composant
Il te faut donc le module mbstring de PHP :
http://fr.php.net/manual/fr/ref.mbstring.php
Vérifie qu’il est effectivement installé sur ton serveur avant de prendre ta décision.
84mickael a écrit :
* incompatibilités dûs à l'utilisation par défaut d'ISO-8859-1
Je ne comprend pas.
84mickael a écrit :
De plus si quelqu'un sait comment transformer en PHP du texte saisi par un utilisateur en chaîne de type UTF-8 ou ISO-8859-1 + entités HTML valide, ce serait gentil de me le dire ici ou sur le sujet dont le lien est cité plus haut.
chaîne en entrée : ISO-8859-1 (donc probablement Windows-1252)
chaîne en sortie : UTF-8 valide
function myutf8_encode($str)
{
$cp1252_map = array(
"\xc2\x80" => "\xe2\x82\xac", /* EURO SIGN */
"\xc2\x82" => "\xe2\x80\x9a", /* SINGLE LOW-9 QUOTATION MARK */
"\xc2\x83" => "\xc6\x92", /* LATIN SMALL LETTER F WITH HOOK */
"\xc2\x84" => "\xe2\x80\x9e", /* DOUBLE LOW-9 QUOTATION MARK */
"\xc2\x85" => "\xe2\x80\xa6", /* HORIZONTAL ELLIPSIS */
"\xc2\x86" => "\xe2\x80\xa0", /* DAGGER */
"\xc2\x87" => "\xe2\x80\xa1", /* DOUBLE DAGGER */
"\xc2\x88" => "\xcb\x86", /* MODIFIER LETTER CIRCUMFLEX ACCENT */
"\xc2\x89" => "\xe2\x80\xb0", /* PER MILLE SIGN */
"\xc2\x8a" => "\xc5\xa0", /* LATIN CAPITAL LETTER S WITH CARON */
"\xc2\x8b" => "\xe2\x80\xb9", /* SINGLE LEFT-POINTING ANGLE QUOTATION */
"\xc2\x8c" => "\xc5\x92", /* LATIN CAPITAL LIGATURE OE */
"\xc2\x8e" => "\xc5\xbd", /* LATIN CAPITAL LETTER Z WITH CARON */
"\xc2\x91" => "\xe2\x80\x98", /* LEFT SINGLE QUOTATION MARK */
"\xc2\x92" => "\xe2\x80\x99", /* RIGHT SINGLE QUOTATION MARK */
"\xc2\x93" => "\xe2\x80\x9c", /* LEFT DOUBLE QUOTATION MARK */
"\xc2\x94" => "\xe2\x80\x9d", /* RIGHT DOUBLE QUOTATION MARK */
"\xc2\x95" => "\xe2\x80\xa2", /* BULLET */
"\xc2\x96" => "\xe2\x80\x93", /* EN DASH */
"\xc2\x97" => "\xe2\x80\x94", /* EM DASH */
"\xc2\x98" => "\xcb\x9c", /* SMALL TILDE */
"\xc2\x99" => "\xe2\x84\xa2", /* TRADE MARK SIGN */
"\xc2\x9a" => "\xc5\xa1", /* LATIN SMALL LETTER S WITH CARON */
"\xc2\x9b" => "\xe2\x80\xba", /* SINGLE RIGHT-POINTING ANGLE QUOTATION*/
"\xc2\x9c" => "\xc5\x93", /* LATIN SMALL LIGATURE OE */
"\xc2\x9e" => "\xc5\xbe", /* LATIN SMALL LETTER Z WITH CARON */
"\xc2\x9f" => "\xc5\xb8" /* LATIN CAPITAL LETTER Y WITH DIAERESIS*/
);
return strtr(utf8_encode($str), $cp1252_map);
}
chaîne en entrée : ISO-8859-1 (donc probablement Windows-1252)
chaîne en sortie : ISO-8859-1 valide (les caractères provenant en fait de Windows-1252 sont transformés en entités HTML)
function purge_iso88591($str)
{
$cp1252_map = array(
"\x80" => "€", /* EURO SIGN */
"\x82" => "‚", /* SINGLE LOW-9 QUOTATION MARK */
"\x83" => "ƒ", /* LATIN SMALL LETTER F WITH HOOK */
"\x84" => "„", /* DOUBLE LOW-9 QUOTATION MARK */
"\x85" => "…", /* HORIZONTAL ELLIPSIS */
"\x86" => "†", /* DAGGER */
"\x87" => "‡", /* DOUBLE DAGGER */
"\x88" => "ˆ", /* MODIFIER LETTER CIRCUMFLEX ACCENT */
"\x89" => "‰", /* PER MILLE SIGN */
"\x8a" => "Š", /* LATIN CAPITAL LETTER S WITH CARON */
"\x8b" => "‹", /* SINGLE LEFT-POINTING ANGLE QUOTATION */
"\x8c" => "Œ", /* LATIN CAPITAL LIGATURE OE */
"\x8e" => "Ž", /* LATIN CAPITAL LETTER Z WITH CARON */
"\x91" => "‘", /* LEFT SINGLE QUOTATION MARK */
"\x92" => "’", /* RIGHT SINGLE QUOTATION MARK */
"\x93" => "“", /* LEFT DOUBLE QUOTATION MARK */
"\x94" => "”", /* RIGHT DOUBLE QUOTATION MARK */
"\x95" => "•", /* BULLET */
"\x96" => "–", /* EN DASH */
"\x97" => "—", /* EM DASH */
"\x98" => "˜", /* SMALL TILDE */
"\x99" => "™", /* TRADE MARK SIGN */
"\x9a" => "š", /* LATIN SMALL LETTER S WITH CARON */
"\x9b" => "›", /* SINGLE RIGHT-POINTING ANGLE QUOTATION*/
"\x9c" => "œ", /* LATIN SMALL LIGATURE OE */
"\x9e" => "ž", /* LATIN SMALL LETTER Z WITH CARON */
"\x9f" => "Ÿ" /* LATIN CAPITAL LETTER Y WITH DIAERESIS*/
);
return strtr($str, $cp1252_map);
}
Modifié par Bobe (23 Aug 2005 - 02:30)