y a t il une alternative à htmlentities ?

y a t il une alternative à htmlentities ? - PHP - Programmation

Marsh Posté le 13-01-2007 à 15:43:42    

Bonjour,
Je voudrais savoir, comme je le demande dans le titre de mon sujet, si une alternative à htmlentities existe. Qui pourrait me permettre de ne traduire en caractère html que les " é è ê à ù... " sans convertir les " < > ""... " ?
Merci d'avance !

Reply

Marsh Posté le 13-01-2007 à 15:43:42   

Reply

Marsh Posté le 13-01-2007 à 17:02:54    

Nan, faut faire une version custom [:dawa] Moi j'me suis fait un truc comme ça, qui gère tous les caractères :

Code :
  1. class Html
  2. {
  3.     private static $utf8ToEntity = array (' ' => '&nbsp;', '¡' => '&iexcl;', '¢' => '&cent;', '£' => '&pound;', '¤' => '&curren;', '¥' => '&yen;', '¦' => '&brvbar;', '§' => '&sect;', '¨' => '&uml;', '©' => '&copy;', 'ª' => '&ordf;', '«' => '&laquo;', '¬' => '&not;', '­' => '&shy;', '®' => '&reg;', '¯' => '&macr;', '°' => '&deg;', '±' => '&plusmn;', '²' => '&sup2;', '³' => '&sup3;', '´' => '&acute;', 'µ' => '&micro;', '¶' => '&para;', '·' => '&middot;', '¸' => '&cedil;', '¹' => '&sup1;', 'º' => '&ordm;', '»' => '&raquo;', '¼' => '&frac14;', '½' => '&frac12;', '¾' => '&frac34;', '¿' => '&iquest;', 'À' => '&Agrave;', 'Á' => '&Aacute;', 'Â' => '&Acirc;', 'Ã' => '&Atilde;', 'Ä' => '&Auml;', 'Å' => '&Aring;', 'Æ' => '&AElig;', 'Ç' => '&Ccedil;', 'È' => '&Egrave;', 'É' => '&Eacute;', 'Ê' => '&Ecirc;', 'Ë' => '&Euml;', 'Ì' => '&Igrave;', 'Í' => '&Iacute;', 'Î' => '&Icirc;', 'Ï' => '&Iuml;', 'Ð' => '&ETH;', 'Ñ' => '&Ntilde;', 'Ò' => '&Ograve;', 'Ó' => '&Oacute;', 'Ô' => '&Ocirc;', 'Õ' => '&Otilde;', 'Ö' => '&Ouml;', '×' => '&times;', 'Ø' => '&Oslash;', 'Ù' => '&Ugrave;', 'Ú' => '&Uacute;', 'Û' => '&Ucirc;', 'Ü' => '&Uuml;', 'Ý' => '&Yacute;', 'Þ' => '&THORN;', 'ß' => '&szlig;', 'à' => '&agrave;', 'á' => '&aacute;', 'â' => '&acirc;', 'ã' => '&atilde;', 'ä' => '&auml;', 'å' => '&aring;', 'æ' => '&aelig;', 'ç' => '&ccedil;', 'è' => '&egrave;', 'é' => '&eacute;', 'ê' => '&ecirc;', 'ë' => '&euml;', 'ì' => '&igrave;', 'í' => '&iacute;', 'î' => '&icirc;', 'ï' => '&iuml;', 'ð' => '&eth;', 'ñ' => '&ntilde;', 'ò' => '&ograve;', 'ó' => '&oacute;', 'ô' => '&ocirc;', 'õ' => '&otilde;', 'ö' => '&ouml;', '÷' => '&divide;', 'ø' => '&oslash;', 'ù' => '&ugrave;', 'ú' => '&uacute;', 'û' => '&ucirc;', 'ü' => '&uuml;', 'ý' => '&yacute;', 'þ' => '&thorn;', 'ÿ' => '&yuml;', '<' => '&lt;', '>' => '&gt;', '&' => '&amp;');
  4.     /**
  5.      * Encode les caractères non-ASCII
  6.      *
  7.      * Utilise les entités nommées LATIN1 définies par la recommendation HTML4,
  8.      * et des entités numériques pour le reste. Attention, les caractères <, >,
  9.      * ', " et & ne sont pas encodés. Fonction à utiliser pour échapper des
  10.      * caractères dans un environnement HTML dont l'encodage n'est pas fixé.
  11.      *
  12.      * @param string $string Chaîne à encoder
  13.      * @return string Chaîne encodée
  14.      */
  15.     public static function encodeChars($string)
  16.     {
  17.         $string = strtr($string, self::$utf8ToEntity);
  18.         /* On prend tout ce qui n'est pas de l'ASCII et qui n'a pas été encore
  19.          * encodé par htmlentities, et on encode en entité numérique (&#xxxx;)
  20.          */
  21.         $string = preg_replace('/([^\x00-\x7F])/eu', "'&#' . self::utf8Ord('\\1') . ';'", $string);
  22.         return $string;
  23.     }
  24.     /**
  25.      * Retourne le code-position d'un caractère
  26.      *
  27.      * @param string $c Caractère utf-8
  28.      * @return int Code-position du caractère
  29.      */
  30.     public static function utf8Ord($c)
  31.     {
  32.         $ud = 0;
  33.         $ord0 = ord($c{0});
  34.         if($ord0 >= 0 && $ord0 <= 127) {
  35.             $ud = $ord0;
  36.         } elseif($ord0 >= 192 && $ord0 <= 223) {
  37.             $ud = ($ord0 - 192) * 64 + (ord($c{1}) - 128);
  38.         } elseif($ord0 >= 224 && $ord0 <= 239) {
  39.             $ud = ($ord0 - 224) * 4096 + (ord($c{1}) - 128) * 64 + (ord($c{2}) - 128);
  40.         } elseif($ord0 >= 240 && $ord0 <= 247) {
  41.             $ud = ($ord0 - 240) * 262144 + (ord($c{1}) - 128) * 4096 + (ord($c{2}) - 128) * 64 + (ord($c{3}) - 128);
  42.         } elseif($ord0 >= 248 && $ord0 <= 251) {
  43.             $ud = ($ord0 - 248) * 16777216 + (ord($c{1}) - 128) * 262144 + (ord($c{2}) - 128) * 4096 + (ord($c{3}) - 128) * 64 + (ord($c{4}) - 128);
  44.         } elseif($ord0 >= 252 && $ord0 <= 253) {
  45.             $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);
  46.         } elseif($ord0 >= 254 && $ord0 <= 255) {
  47.             throw new Exception('Invalid utf-8 character');
  48.         }
  49.         return $ud;
  50.     }
  51. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed