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 :

Manipulation des chaînes UTF-8


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut Manipulation des chaînes UTF-8
    Bonjour,

    j'ai appris que l'UTF-8 était codé sur 2 octets contrairement à l'ISO. Et apparemment, (du moins, c'est mon cas) cela pose pas mal de problèmes avec PHP.
    En effet, il y a quelques temps, je me suis tiré les cheveux sur le script suivant cencé nettoyer une chaîne de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function clean($filename) {
        $search  = 'çñÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðòóôõöùúûüµýÿ';
        $replace = 'cnAAAAAACEEEEIIIIOOOOOUUUUYaaaaaaeeeeiiiioooooouuuuuyy';
        return strtr($filename, $search, $replace);
    }
    et bien ce script ne fonctionne pas lorsque la page est au format UTF-8. Je me suis rendu compte que le nombre de caractères dans $search n'était pas le même que pour $replace ! Visuellement, les deux ont 54 caractères mais strlen($search) retourne 108... ce qui crée un décalage pour la fonction strtr().

    Alors ma première question est :
    ¤ est-il possible de détecter (via une fonction ou script) si une chaîne est au format UTF-8 ?
    ma seconde question :
    ¤ connaissez vous un script permettant la même chose que clean() (ci-dessus) tout en gérant l'UTF-8 ?

    Merci d'avance !

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    pour détecter l'encodage d'une chaine tu as mb_detect_encoding()

    et pour ton probleme il faut effectivement éviter d'utiliser strtr() dans le cas de chaines UTF-8 mais plutot utiliser str_replace(). il y a plusieurs exemples dans le forum utilisant str_replace pour les caractères spéciaux je crois.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut surement des solutions
    bon petit sujet de révision, alors j'ai essayé de trois manipe, et je partage, et et enfin de compte clean() parait fonctionnel


    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
    <?php
     
    header('Content-Type: text/html; charset=utf-8');
     
    $a="çñÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðòóôõöùúûüµýÿ";
     
    echo mb_detect_encoding ($a)." ".$a."<br/>";
     
     
    $a= utf8_encode($a);
    echo mb_detect_encoding ($a)." ".$a."<br/>";
     
     
    $a= utf8_decode($a);
    echo mb_detect_encoding ($a)." ".$a."<br/>";
     
     
    clean($a);
     
     
    function clean($filename) {
    $search = 'çñÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðòóôõöùúûüµýÿ';
    $replace = 'cnAAAAAACEEEEIIIIOOOOOUUUUYaaaaaaeeeeiiiioooooouuuuuyy'; 
    $a=strtr($filename, $search, $replace);
     echo mb_detect_encoding ($a)." ".$a."<br/>";
    }
     
    ?>

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

Discussions similaires

  1. Manipulation des chaînes de caractères
    Par mariamou dans le forum LabVIEW
    Réponses: 3
    Dernier message: 26/06/2013, 17h08
  2. Réponses: 16
    Dernier message: 25/09/2009, 15h10
  3. Manipulation des chaîne de Caractères ?
    Par Sceener dans le forum C++
    Réponses: 4
    Dernier message: 15/07/2007, 10h28
  4. Manipuler des chaînes dans un tableau
    Par cirtey dans le forum C
    Réponses: 5
    Dernier message: 01/03/2007, 22h08

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