Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Existe-t-il en Zend 2 un fonction qui permette de supprimer les accents en les remplacants par leur corespondances sans accents ? et les caractères spéciaux en '-' par exemple ?
J'ai trouvé cela en PHP :
function string2url ($chaine) { setlocale(LC_ALL, 'fr_FR'); $chaine = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $chaine); $chaine = preg_replace('#[^0-9a-z]+#i', '-', $chaine); while(strpos($chaine, '--') !== false) { $chaine = str_replace('--', '-', $chaine); } $chaine = trim($chaine, '-'); return $chaine; }
Mais quand je fais dans mon projet en ZF2 je recois un POST par exemple La dépendance. cela me le convertie en : La-d-ependance
pourquoi le d-e ? et pas de ?
Merci
Hors ligne
re,
J'ai fais comme cela mais je ne sais pas si c'est performant :
[lang=php]private function string2url ($chaine) { setlocale(LC_ALL, 'fr_FR'); $chaine = iconv ('UTF-8', 'US-ASCII//TRANSLIT//IGNORE', $chaine); $chaine = preg_replace ('#[^.0-9a-z]+#i', '', $chaine); $chaine = str_replace(".", "-", $chaine); $chaine = strtolower(trim($chaine)); return $chaine; }
Dernière modification par Paul75 (06-03-2014 23:33:22)
Hors ligne
Hello
function string2url($chaine) { $chaine = trim($chaine); $chaine = strtr($chaine, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn"); $chaine = strtr($chaine,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz"); $chaine = preg_replace('#([^.a-z0-9]+)#i', '-', $chaine); $chaine = preg_replace('#-{2,}#','-',$chaine); $chaine = preg_replace('#-$#','',$chaine); $chaine = preg_replace('#^-#','',$chaine); return $chaine; }
Mais c'est pas du zend framework.
Hors ligne
Salut normalement ça ça fonctionne :
[lang=php] setlocale(LC_ALL, 'fr_FR.utf8'); $string = str_replace(array('\''), ' ', $string); $string = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $string); $string = preg_replace('/[^a-zA-Z0-9\/_| -]/', '', $string); $string = preg_replace('/[\/_| -]+/', '-', $string); $string = strtolower(trim($string, '-'));
Ca va te générer un slug donc à toi de remplacer ce qu'il faut pour que ça fasse ce que tu veux.
Hors ligne
Une question encore j'ai trouvé cette classe :
[lang=php] class phpSlug { private static function my_str_split($string) { $slen=strlen($string); for($i=0; $i<$slen; $i++) { $sArray[$i]=$string{$i}; } return $sArray; } private static function noDiacritics($string) { //cyrylic transcription $cyrylicFrom = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'); $cyrylicTo = array('A', 'B', 'W', 'G', 'D', 'Ie', 'Io', 'Z', 'Z', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'Ch', 'C', 'Tch', 'Sh', 'Shtch', '', 'Y', '', 'E', 'Iu', 'Ia', 'a', 'b', 'w', 'g', 'd', 'ie', 'io', 'z', 'z', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'ch', 'c', 'tch', 'sh', 'shtch', '', 'y', '', 'e', 'iu', 'ia'); $from = array("Á", "À", "Â", "Ä", "Ă", "Ā", "Ã", "Å", "Ą", "Æ", "Ć", "Ċ", "Ĉ", "Č", "Ç", "Ď", "Đ", "Ð", "É", "È", "Ė", "Ê", "Ë", "Ě", "Ē", "Ę", "Ə", "Ġ", "Ĝ", "Ğ", "Ģ", "á", "à", "â", "ä", "ă", "ā", "ã", "å", "ą", "æ", "ć", "ċ", "ĉ", "č", "ç", "ď", "đ", "ð", "é", "è", "ė", "ê", "ë", "ě", "ē", "ę", "ə", "ġ", "ĝ", "ğ", "ģ", "Ĥ", "Ħ", "I", "Í", "Ì", "İ", "Î", "Ï", "Ī", "Į", "IJ", "Ĵ", "Ķ", "Ļ", "Ł", "Ń", "Ň", "Ñ", "Ņ", "Ó", "Ò", "Ô", "Ö", "Õ", "Ő", "Ø", "Ơ", "Œ", "ĥ", "ħ", "ı", "í", "ì", "i", "î", "ï", "ī", "į", "ij", "ĵ", "ķ", "ļ", "ł", "ń", "ň", "ñ", "ņ", "ó", "ò", "ô", "ö", "õ", "ő", "ø", "ơ", "œ", "Ŕ", "Ř", "Ś", "Ŝ", "Š", "Ş", "Ť", "Ţ", "Þ", "Ú", "Ù", "Û", "Ü", "Ŭ", "Ū", "Ů", "Ų", "Ű", "Ư", "Ŵ", "Ý", "Ŷ", "Ÿ", "Ź", "Ż", "Ž", "ŕ", "ř", "ś", "ŝ", "š", "ş", "ß", "ť", "ţ", "þ", "ú", "ù", "û", "ü", "ŭ", "ū", "ů", "ų", "ű", "ư", "ŵ", "ý", "ŷ", "ÿ", "ź", "ż", "ž"); $to = array("A", "A", "A", "A", "A", "A", "A", "A", "A", "AE", "C", "C", "C", "C", "C", "D", "D", "D", "E", "E", "E", "E", "E", "E", "E", "E", "G", "G", "G", "G", "G", "a", "a", "a", "a", "a", "a", "a", "a", "a", "ae", "c", "c", "c", "c", "c", "d", "d", "d", "e", "e", "e", "e", "e", "e", "e", "e", "g", "g", "g", "g", "g", "H", "H", "I", "I", "I", "I", "I", "I", "I", "I", "IJ", "J", "K", "L", "L", "N", "N", "N", "N", "O", "O", "O", "O", "O", "O", "O", "O", "CE", "h", "h", "i", "i", "i", "i", "i", "i", "i", "i", "ij", "j", "k", "l", "l", "n", "n", "n", "n", "o", "o", "o", "o", "o", "o", "o", "o", "o", "R", "R", "S", "S", "S", "S", "T", "T", "T", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "W", "Y", "Y", "Y", "Z", "Z", "Z", "r", "r", "s", "s", "s", "s", "B", "t", "t", "b", "u", "u", "u", "u", "u", "u", "u", "u", "u", "u", "w", "y", "y", "y", "z", "z", "z"); $from = array_merge($from, $cyrylicFrom); $to = array_merge($to, $cyrylicTo); $newstring=str_replace($from, $to, $string); return $newstring; } public static function makeSlugs($string, $maxlen=0) { $newStringTab=array(); $string=strtolower(self::noDiacritics($string)); if(function_exists('str_split')) { $stringTab=str_split($string); } else { $stringTab=self::my_str_split($string); } $numbers=array("0","1","2","3","4","5","6","7","8","9","-"); foreach($stringTab as $letter) { if(in_array($letter, range("a", "z")) || in_array($letter, $numbers)) { $newStringTab[]=$letter; } elseif($letter==" ") { $newStringTab[]="-"; } } if(count($newStringTab)) { $newString=implode($newStringTab); if($maxlen>0) { $newString=substr($newString, 0, $maxlen); } $newString = self::removeDuplicates('--', '-', $newString); } else { $newString=''; } return $newString; } private static function checkSlug($sSlug) { if(ereg ("^[a-zA-Z0-9]+[a-zA-Z0-9\_\-]*$", $sSlug)) { return true; } return false; } private static function removeDuplicates($sSearch, $sReplace, $sSubject) { $i=0; do{ $sSubject=str_replace($sSearch, $sReplace, $sSubject); $pos=strpos($sSubject, $sSearch); $i++; if($i>100) { die('removeDuplicates() loop error'); } } while($pos!==false); return $sSubject; } }
Es-ce vraiment utile ?
Ou ta version suffit ? En fait c'est pour créer des raccourcis des menus dans la BDD pour générer dynamiquement.
Merci.
Hors ligne
C'est toi qui voit, dans un cas tu utilises une fonction native de php dans l'autre tu te fais chier à lister tous les caractères spéciaux .
Hors ligne
Merci Orkin !
Et désolé c'est pas du Zend.
Hors ligne