FlorentG | Nan, faut faire une version custom Moi j'me suis fait un truc comme ça, qui gère tous les caractères :
Code :
- class Html
- {
- private static $utf8ToEntity = array (' ' => ' ', '¡' => '¡', '¢' => '¢', '£' => '£', '¤' => '¤', '¥' => '¥', '¦' => '¦', '§' => '§', '¨' => '¨', '©' => '©', 'ª' => 'ª', '«' => '«', '¬' => '¬', '' => '­', '®' => '®', '¯' => '¯', '°' => '°', '±' => '±', '²' => '²', '³' => '³', '´' => '´', 'µ' => 'µ', '¶' => '¶', '·' => '·', '¸' => '¸', '¹' => '¹', 'º' => 'º', '»' => '»', '¼' => '¼', '½' => '½', '¾' => '¾', '¿' => '¿', 'À' => 'À', 'Á' => 'Á', 'Â' => 'Â', 'Ã' => 'Ã', 'Ä' => 'Ä', 'Å' => 'Å', 'Æ' => 'Æ', 'Ç' => 'Ç', 'È' => 'È', 'É' => 'É', 'Ê' => 'Ê', 'Ë' => 'Ë', 'Ì' => 'Ì', 'Í' => 'Í', 'Î' => 'Î', 'Ï' => 'Ï', 'Ð' => 'Ð', 'Ñ' => 'Ñ', 'Ò' => 'Ò', 'Ó' => 'Ó', 'Ô' => 'Ô', 'Õ' => 'Õ', 'Ö' => 'Ö', '×' => '×', 'Ø' => 'Ø', 'Ù' => 'Ù', 'Ú' => 'Ú', 'Û' => 'Û', 'Ü' => 'Ü', 'Ý' => 'Ý', 'Þ' => 'Þ', 'ß' => 'ß', 'à' => 'à', 'á' => 'á', 'â' => 'â', 'ã' => 'ã', 'ä' => 'ä', 'å' => 'å', 'æ' => 'æ', 'ç' => 'ç', 'è' => 'è', 'é' => 'é', 'ê' => 'ê', 'ë' => 'ë', 'ì' => 'ì', 'í' => 'í', 'î' => 'î', 'ï' => 'ï', 'ð' => 'ð', 'ñ' => 'ñ', 'ò' => 'ò', 'ó' => 'ó', 'ô' => 'ô', 'õ' => 'õ', 'ö' => 'ö', '÷' => '÷', 'ø' => 'ø', 'ù' => 'ù', 'ú' => 'ú', 'û' => 'û', 'ü' => 'ü', 'ý' => 'ý', 'þ' => 'þ', 'ÿ' => 'ÿ', '<' => '<', '>' => '>', '&' => '&');
- /**
- * Encode les caractères non-ASCII
- *
- * Utilise les entités nommées LATIN1 définies par la recommendation HTML4,
- * et des entités numériques pour le reste. Attention, les caractères <, >,
- * ', " et & ne sont pas encodés. Fonction à utiliser pour échapper des
- * caractères dans un environnement HTML dont l'encodage n'est pas fixé.
- *
- * @param string $string Chaîne à encoder
- * @return string Chaîne encodée
- */
- public static function encodeChars($string)
- {
- $string = strtr($string, self::$utf8ToEntity);
- /* On prend tout ce qui n'est pas de l'ASCII et qui n'a pas été encore
- * encodé par htmlentities, et on encode en entité numérique (xxx;)
- */
- $string = preg_replace('/([^\x00-\x7F])/eu', "'&#' . self::utf8Ord('\\1') . ';'", $string);
- return $string;
- }
- /**
- * Retourne le code-position d'un caractère
- *
- * @param string $c Caractère utf-8
- * @return int Code-position du caractère
- */
- public static function utf8Ord($c)
- {
- $ud = 0;
- $ord0 = ord($c{0});
- if($ord0 >= 0 && $ord0 <= 127) {
- $ud = $ord0;
- } elseif($ord0 >= 192 && $ord0 <= 223) {
- $ud = ($ord0 - 192) * 64 + (ord($c{1}) - 128);
- } elseif($ord0 >= 224 && $ord0 <= 239) {
- $ud = ($ord0 - 224) * 4096 + (ord($c{1}) - 128) * 64 + (ord($c{2}) - 128);
- } elseif($ord0 >= 240 && $ord0 <= 247) {
- $ud = ($ord0 - 240) * 262144 + (ord($c{1}) - 128) * 4096 + (ord($c{2}) - 128) * 64 + (ord($c{3}) - 128);
- } elseif($ord0 >= 248 && $ord0 <= 251) {
- $ud = ($ord0 - 248) * 16777216 + (ord($c{1}) - 128) * 262144 + (ord($c{2}) - 128) * 4096 + (ord($c{3}) - 128) * 64 + (ord($c{4}) - 128);
- } elseif($ord0 >= 252 && $ord0 <= 253) {
- $ud = ($ord0 - 252) * 1073741824 + (ord($c{1}) - 128) * 16777216 + (ord($c{2}) - 128) * 262144 + (ord($c{3}) - 128) * 4096 + (ord($c{4}) - 128) * 64 + (ord($c{5}) - 128);
- } elseif($ord0 >= 254 && $ord0 <= 255) {
- throw new Exception('Invalid utf-8 character');
- }
- return $ud;
- }
- }
|
|