Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je développe une application avec le ZF en UTF-8. Je n'ai pas de problèmes pour la visualisation ni pour le stockage des informations et des chaïnes de caractères dans la base de données.
Par contre, je modifie toutes les données entrées par les utilisateurs et je les mets en majuscules. Tout marche ok sauf pour les caractères accentués.
Ainsi, téléphone devient TéLéPHONE. ??
Mis à part la modification de la classe Zend_Filter_UpperCase, quelqu'un aurait-il une idée plus simple?
Salutations!
Dernière modification par jcerdan (01-09-2009 11:52:33)
Hors ligne
Peut etre une fonction pour remplacer les accents par des caractères sans accents ?
$string = str_replace( array("à","á","â","ã","ä","ç","è","é","ê","ë", "ì","í","î","ï", "ñ", "ò","ó","ô","õ","ö", "ù","ú","û","ü", "ý","ÿ", "À","Á","Â","Ã","Ä", "Ç", "È","É","Ê","Ë", "Ì","Í","Î","Ï", "Ñ", "Ò","Ó","Ô","Õ","Ö", "Ù","Ú","Û","Ü", "Ý"), array("a","a","a","a","a", "c", "e","e","e","e", "i","i","i","i", "n", "o","o","o","o","o", "u","u","u","u", "y","y", "A","A","A","A","A", "C", "E","E","E","E", "I","I","I","I", "N", "O","O","O","O","O", "U","U","U","U", "Y"), $string);
Hors ligne
j'avais testé avec l'utf-8 sans succès.
Voici un filtre que j'ai créer si tu veux (en reprenant un code existant)
class App_Filter_DellSpecialChars implements Zend_Filter_Interface { /** * @see Zend_Filter_Interface::filter() * * @param mixed $value * @return mixed */ public function filter($value) { $value = str_replace("'", "", $value); $value = htmlentities($value, ENT_NOQUOTES, 'utf-8'); $value = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $value); $value = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $value); // pour les ligatures e.g. 'œ' $value = preg_replace('#\&[^;]+\;#', '', $value); // supprime les autres caractères $value = preg_replace('/\s/', '', $value); //supprime les espaces return $value; } }
sa devrai t'aider je pense.
Sinon ya pas un second argument pour le filtre stringtoupper pour justement dire que c'est en utf-8
Dernière modification par throrin19 (01-09-2009 14:02:52)
Hors ligne
Oui, effectivement il y a un second argument pour indiquer le charset. Je l'utilise déjà, mais cela ne tient pas en compte les caractères accentués et isl restent an minuscules.
Je pensais qu'il existait une fonction magique que je ne connaissais pas mais je vois que non, il faudra donc que je fasse comme vous me l'avez bien proposé aelyta1 et throrin19.
Merci.
Hors ligne
j'avais essayé avec la fonction de base de php et j'avais réussi à agrandir les accents. Le bémol c'est que je ne retrouve pas le code concerné pour te le montrer
Hors ligne
Voilà, j'ai résolu le problème de façon plutôt "élégante":
j'ai créé le filtre Zend_filter_UpperCase:
<?php class Zend_Filter_UpperCase implements Zend_Filter_Interface { public function filter($value) { $valueFiltered = str_replace( array("à","á","â","ä","ç","è","é","ê","ë","ì","í","î","ï","ñ","ò","ó","ô","ö","ù","ú","û","ü","ý","ÿ"), array("À","Á","Â","Ä","Ç","È","É","Ê","Ë","Ì","Í","Î","Ï","Ñ","Ò","Ó","Ô","Ö","Ù","Ú","Û","Ü","Ý","Ÿ"), $value); return $valueFiltered; } }
Dans un fichier que j'ai placé dans /library/Zend/Filter/UpperCase.php
Maintenant, dans mes controlleurs je peux faire:
$this->f = new Zend_Filter(); $this->f->addFilter(new Zend_Filter_StripTags()); $this->f->addFilter(new Zend_Filter_UpperCase()); $this->f->addFilter(new Zend_Filter_StringToUpper("UTF-8"));
Et voilà!
Hors ligne
j'avais essayé cette méthode sans succès, sa me mettais les caractères ?? propres à utf-8 quand il reconnait pas les caractères.
Hors ligne
@jcerdan, ta solution est parfaite !
Merci
Hors ligne
Pages: 1