IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Utilisation de la fonction strtr


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de tentsuken
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut Utilisation de la fonction strtr
    Bonjour,
    Je souhaite convertir une chaine pour l'optimiser pour la réécriture d'url
    j'ai donc cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    function convert_for_url($chaine) {	
    	$remplace = array('à'=>'a',
    				'á'=>'a',
    				'â'=>'a',
    				'ã'=>'a',
    				'ä'=>'a',
    				'å'=>'a',
    				'ò'=>'o',
    				'ó'=>'o',
    				'ô'=>'o',
    				'õ'=>'o',
    				'ö'=>'o',
    				'è'=>'e',
    				'é'=>'e',
    				'ê'=>'e',
    				'ë'=>'e',
    				'ì'=>'i',
    				'í'=>'i',
    				'î'=>'i',
    				'ï'=>'i',
    				'ù'=>'u',
    				'ú'=>'u',
    				'û'=>'u',
    				'ü'=>'u',
    				'ÿ'=>'y',
    				'ñ'=>'n',
    				'ç'=>'c',
    				'ø'=>'0'
    				);
    	$chaine = strtr($chaine,$remplace); 
            //$chaine = strtolower(strtr($chaine,"àâäåãáçéèêëïîìíñöôóòõùûüúÿ", "aaaaaaceeeeiiiinooooouuuuy")); //Remplacement des caractères accentués par leurs équivariants non accentués
            $chaine = preg_replace('#[^a-z0-9_-]#','-',$chaine); //Remplace tous les caractères non alphanumérique par un tiret
            while (strpos($chaine,'--') !== false) $chaine = str_replace('--','-',$chaine); //Suppression des tiret en trop
            return $chaine;
     
    }
    Mais les caracteres accentuer ne sont pas remplacer par leur equivalent sans accents et se retrouve supprimmé.

    Petite précision, sur un page de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine2 = strtr($chaine, 'àáâãäåòóôõöøèéêëçìíîïùúûüÿñ', 'aaaaaaooooooeeeeciiiiuuuuyn');
    ne fonctionne pas

    mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    $remplace = array('à'=>'a',
    				'á'=>'a',
    				'â'=>'a',
    				'ã'=>'a',
    				'ä'=>'a',
    				'å'=>'a',
    				'ò'=>'o',
    				'ó'=>'o',
    				'ô'=>'o',
    				'õ'=>'o',
    				'ö'=>'o',
    				'è'=>'e',
    				'é'=>'e',
    				'ê'=>'e',
    				'ë'=>'e',
    				'ì'=>'i',
    				'í'=>'i',
    				'î'=>'i',
    				'ï'=>'i',
    				'ù'=>'u',
    				'ú'=>'u',
    				'û'=>'u',
    				'ü'=>'u',
    				'ÿ'=>'y',
    				'ñ'=>'n',
    				'ç'=>'c',
    				'ø'=>'0'
    				);
    $chaine2 = strtr($chaine,$remplace);
    fonctionne très bien

    Si quelqu'un pouvait m'aider.
    Cordialement,
    Tentsuken

  2. #2
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo strtr('chàïné', 'àáâãäåòóôõöøèéêëçìíîïùúûüÿñ', 'aaaaaaooooooeeeeciiiiuuuuyn');
    affiche
    chaine

  3. #3
    Membre confirmé Avatar de tentsuken
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    Bonjour,

    cette ligne de commande affiche chez moi :
    chnan¯nn©
    Il n'y a qu'avec le array que les changement de caractère fonctionne sur mon site, mais quand je passe par une fonction, cela ne marche plus.

  4. #4
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Il semblerait que ton fichier soit encodé en utf8.

    Or, cette fonction ne semble pas savoir gérer un autre type d'encodage que celui que php utilise par défaut (différent de utf8)

    une solution serait donc d'utiliser utf8_decode sur les chaines contenant des caractères spéciaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo strtr(utf8_decode('chàïné'), utf8_decode('àáâãäåòóôõöøèéêëçìíîïùúûüÿñ'), 'aaaaaaooooooeeeeciiiiuuuuyn');

  5. #5
    Membre confirmé Avatar de tentsuken
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    Alors, la cela fonctione sur ma page de teste mai toujours pas au sein de ma fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function convert_for_url($chaine) {
       $chaine = strtolower(strtr(utf8_decode($chaine),utf8_decode('àâäåãáçéèêëïîìíñöôóòõùûüúÿ'), utf8_decode('aaaaaaceeeeiiiinooooouuuuy'))); 
       $chaine = preg_replace('#[^a-z0-9_-]#','-',$chaine); //Remplace tous les caractères non alphanumérique par un tiret
       while (strpos($chaine,'--') !== false) $chaine = str_replace('--','-',$chaine); //Suppression des tiret en trop
       return $chaine;
     
    }

  6. #6
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    quel est le résultat ?

  7. #7
    Membre confirmé Avatar de tentsuken
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    Sur ma page de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo strtr(utf8_decode('chàïné'), utf8_decode('àáâãäåòóôõöøèéêëçìíîïùúûüÿñ'), 'aaaaaaooooooeeeeciiiiuuuuyn')
    m'affiche bien chaine

    Mais pour ma fonction si je fait : avec $chaine ="- Médecines douces";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function convert_for_url($chaine) {
       $chaine = strtolower(strtr(utf8_decode($chaine),utf8_decode('àâäåãáçéèêëïîìíñöôóòõùûüúÿ'), utf8_decode('aaaaaaceeeeiiiinooooouuuuy'))); 
       $chaine = preg_replace('#[^a-z0-9_-]#','-',$chaine); //Remplace tous les caractères non alphanumérique par un tiret
       while (strpos($chaine,'--') !== false) $chaine = str_replace('--','-',$chaine); //Suppression des tiret en trop
       return $chaine;
     
    }
    sa me renvoie : m-decines-douces
    les accent n'étant pas remplacer il mes les remplace par des - dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = preg_replace('#[^a-z0-9_-]#','-',$chaine);

  8. #8
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    je serais tenté de dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function convert_for_url($chaine) {
    	$chaine = utf8_encode(strtr(strtolower(utf8_decode($chaine)),utf8_decode('àâäåãáçéèêëïîìíñöôóòõùûüúÿ'), utf8_decode('aaaaaaceeeeiiiinooooouuuuy'))); 
    	$chaine = preg_replace(array('#[^a-z0-9_-]+#', '#-+#'),array('-', '-'),$chaine); //Remplace tous les caractères non alphanumérique par un tiret
    	return $chaine;
    }

  9. #9
    Membre confirmé Avatar de tentsuken
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    J'ai bien repris ta fonction et mis la mienne en commentaire, mais cela fait toujours la même chose, les accents en sont pas remplacé et se retrouve alors supprimé.

    Ainsi: - Médicaments et parole
    Renvoie : m-dicaments-et-parole

    Cordialement

  10. #10
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Le fichier qui contient la fonction et celui qui appelle la fonction sont bien encodé en UTF8 ?

  11. #11
    Membre confirmé Avatar de tentsuken
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    Alors le fichier qui contient la fonction est un fichier php sans encodage appelé inc.fonction.php.

    Les pages qui appelles la fonction sont bien de type utf-8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    Ce que je comprend pas enfaite c'est que sur ma page de test (entièrement en php sans balise html) cela fonctionne et pas a l'intérieur de ma fonction.

    Cordialement,

  12. #12
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Cette balise html ne définie pas l'encodage du fichier. Elle permet juste de dire au navigateur qu'il doit interpréter le contenu de la page avec le charset UTF8. Après, si tes fichiers eux, ne sont pas en UTF8 ça risque poser problème.

    Pour voir dans quel encodage ton fichier est, par exemple avec notepad++ il faut regarder dans le menu "Encodage".

    Je te conseille donc de convertir l'encodage de ton fichier qui contient la fonction en UTF8 si les autres sont aussi en utf8.

    Et cela devrais fonctionner avec la dernière fonction que je t'ai donné.

  13. #13
    Membre confirmé Avatar de tentsuken
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    Impeccable sa fonctionne, j'ai ouvert le fichier inc.fonction.php avec notepad ++ et encoder en utf8. sa a l'air de fonctionner j'espère que cela ne va pas altérer mes autres fonctions.

    Merci pour ton aide.
    Cordialement,
    Tentsuken

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LG]Utilisation de la fonction time
    Par kmitz dans le forum Langage
    Réponses: 4
    Dernier message: 08/04/2005, 13h05
  2. Utilisation de la fonction de déploiement
    Par mchicoix dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/03/2005, 14h35
  3. [LG]Utilisation de la fonction Random
    Par chloe95 dans le forum Langage
    Réponses: 1
    Dernier message: 01/03/2005, 14h20
  4. Utilisation de la fonction qsort
    Par Jsmeline dans le forum C
    Réponses: 8
    Dernier message: 28/01/2005, 12h40
  5. [LG]librairies : utiliser seulement quelques fonctions
    Par wwwroom dans le forum Langage
    Réponses: 13
    Dernier message: 14/05/2004, 22h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo