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;
    }

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;
    }

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; 
}

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, '-'));

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;
    }
}

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