Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'écris une class My_Filter_Accent qui doit m'enlever tous les accent d'un chaine.
<?php require_once 'Zend/Filter/Interface.php'; class My_Filter_Accent implements Zend_Filter_Interface { public function filter($value) { echo $value; //retourne Père $accents = 'è'; $noaccents = 'e'; echo str_replace('è', 'e', $value); // retourne Père echo str_replace('è', 'e', 'Père'); // retourne Pere exit; } }
Le problème ce situe à cette ligne :
echo str_replace('è', 'e', $value); // retourne Père
Il ne me retourne pas Pere alors que la ligne suivante le retourne en écrivant directement.
Pourtant si je fais un echo $value il me retourne bien Père.
Ca fait 2 jours que je butte sur ca, d'ou peut venir le problème ?
Dernière modification par alien7 (28-05-2008 12:41:53)
Hors ligne
Bonjour,
$value ne contiendrait pas Père, mais avec l'accent encodé ?
Par exemple : "P&eagrave;re" ?
Vérifie dans la source comment il l'a
Dernière modification par stf (23-05-2008 12:21:57)
Hors ligne
Ton code fonctionne bien chez moi. J'ai mis $value = 'Père' et je récupère bien 'Pere'.
Sinon tu as strtr qui remplace des caractères par un autre. J'ai trouvé ce code, peut-être que ça t'interesseras :
<? /* Retire les accents de la chaine "$string" */ $Caracs = array("¥" => "Y", "µ" => "u", "À" => "A", "Á" => "A", "Â" => "A", "Ã" => "A", "Ä" => "A", "Å" => "A", "Æ" => "A", "Ç" => "C", "È" => "E", "É" => "E", "Ê" => "E", "Ë" => "E", "Ì" => "I", "Í" => "I", "Î" => "I", "Ï" => "I", "Ð" => "D", "Ñ" => "N", "Ò" => "O", "Ó" => "O", "Ô" => "O", "Õ" => "O", "Ö" => "O", "Ø" => "O", "Ù" => "U", "Ú" => "U", "Û" => "U", "Ü" => "U", "Ý" => "Y", "ß" => "s", "à" => "a", "á" => "a", "â" => "a", "ã" => "a", "ä" => "a", "å" => "a", "æ" => "a", "ç" => "c", "è" => "e", "é" => "e", "ê" => "e", "ë" => "e", "ì" => "i", "í" => "i", "î" => "i", "ï" => "i", "ð" => "o", "ñ" => "n", "ò" => "o", "ó" => "o", "ô" => "o", "õ" => "o", "ö" => "o", "ø" => "o", "ù" => "u", "ú" => "u", "û" => "u", "ü" => "u", "ý" => "y", "ÿ" => "y"); $string = strtr("$string", $Caracs); ?>
Dernière modification par whitespirit (23-05-2008 12:27:49)
Hors ligne
Bah je ne pense pas que ce soit un problème d'encodage: je teste comme ca:
$label = new My_Filter_Accent(); echo $label->filter('Père');
Père n'est pas encodé.
Même problème avec strtr, il eme retorune Père, et encore là si je remplace $string par Père ca marche, j'ai bien Pere.
Ce n'est pas lié au framework puisque si je n'implemente pas Zend_Filter_Interface, j'ai le meme souci.
Je comprends pas, je suis sûr que c'est une erreur toute bête, mais je vois pas.
Pourtant c'est une classe toute bete.
Même en suivant ve tuto ca ne marche pas : http://www.ericmery.fr/blog/ecriture-du … ne-chaine/
Hors ligne
$str = strtr('Père', utf8_decode("ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç'" ), utf8_decode("AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc " ));
Juste pour tester
Dernière modification par whitespirit (23-05-2008 13:02:29)
Hors ligne
Yes ca marche.
Là j'ai besoin d'explication svp
Pour info mon fichier est encodé en ISO-8859-1 et ma classe en utf-8, c'est de là alors non ?
En tous cas je vous remercie pour votre aide.
Dernière modification par alien7 (23-05-2008 13:09:18)
Hors ligne
Bon je suis passé tout en utf-8 cette fois, grace au tuto de philippe :
http://www.kitpages.fr/php_tutorial_utf8.php
Et voilà un bout de code que j'ai pu trouver :
public function filter($value) { $str = htmlentities($value, ENT_NOQUOTES, 'utf-8'); $str = preg_replace('#\&([A-za-z])(?:uml|circ|tilde|acute|grave|cedil|ring)\;#', '\1', $str); $str = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $str); // pour les ligatures e.g. 'œ' $str = preg_replace('#\&[^;]+\;#', '', $str); // supprime les autres caractères return $str; }
Merci encore stf et whitespirit pour votre aide
Dernière modification par alien7 (28-05-2008 14:07:00)
Hors ligne
Pages: 1