Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-03-2014 21:17:19

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Enlever accents et caractères spéciaux ?

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 :

Code:

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;
    }
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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

 

#2 06-03-2014 23:31:01

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: Enlever accents et caractères spéciaux ?

re,

J'ai fais comme cela mais je ne sais pas si c'est performant :

Code:[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;
    }
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Dernière modification par Paul75 (06-03-2014 23:33:22)

Hors ligne

 

#3 07-03-2014 08:41:17

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Enlever accents et caractères spéciaux ?

Hello

Code:

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; 
}
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Mais c'est pas du zend framework.

Hors ligne

 

#4 07-03-2014 09:12:29

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Enlever accents et caractères spéciaux ?

Salut normalement ça ça fonctionne :

Code:[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, '-'));
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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

 

#5 07-03-2014 09:52:27

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: Enlever accents et caractères spéciaux ?

Une question encore j'ai trouvé cette classe :

Code:[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;
    }
}
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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

 

#6 07-03-2014 09:54:23

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Enlever accents et caractères spéciaux ?

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 wink.

Hors ligne

 

#7 07-03-2014 09:56:59

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: Enlever accents et caractères spéciaux ?

Merci Orkin !

Et désolé c'est pas du Zend.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages