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 :

ereg qui ne trouve pas les accents


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Par défaut ereg qui ne trouve pas les accents
    Bonjour à tous

    j'utilise un socket pour récupérer le code HTML d'une page. ensuite, j'essaye de le parser, pour retrouver des bouts d'HTML, et en ressortir des données.

    petit hic : ereg ne me retrouve pas les chaines avec des accents :/ voici mon format regex :

    <a href="viewforum.php\?f=([0-9]{1,})&amp;sid=[[:alnum:]]{32}" class="forumlink">([[:graph:][:space:]]*)</a>

    ce qui pose problème, c'est [[:graph:][:space:]]*. pour info, mon fichier .php est encodé en utf8, je sais pas si ça peut changer quelque chose. sachant que j'ai essayé utf8_encode et utf8_decode sur l'HTML récupéré via le socket, sans changement sur le ereg.

    quelqu'un a une idée ?

  2. #2
    Membre chevronné Avatar de TucSale
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 264
    Par défaut
    bonjour,

    Peux tu nous donner un exemple d'URL a analyser stp, ce qui répondrait a mes questions :
    et avec eregi?
    et pourquoi pas [:alnum:] à la place de [:graph:]

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Par défaut
    oups désolé, voila le type d'HTML que j'ai à trouver, parmi tout le code HTML d'une page :

    pas trouvé
    <a href="viewforum.php?f=38&sid=6ca865271bda5ca3c68777798ba82909" class="forumlink">[TA] News - Bugs - Idées</a>

    trouvé
    <a href="viewforum.php?f=38&sid=6ca865271bda5ca3c68777798ba82909" class="forumlink">[TA] News - Bugs - Idees</a>

    je n'utilise pas erregi parceque je préfère tenir compte de la casse.

    j'utilise [:graph:] et non pas [:alnum:] parceque graph prend en compte tous les caractères possibles (enfin, imprimables), d'après ce que j'ai compris. mais c'est mon premier regex, donc je galère un peu

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Vos locales sont-elles correctes ? (cf phpinfo).

    Il est préférable aujourd'hui d'utiliser l'extension PCRE aux fonctions POSIX (ereg) :
    Citation Envoyé par Yogui
    eregi est une fonction dépassée qui est même désactivée depuis PHP 5.2... Il faut maintenant utiliser les PCRE, la différence est simple et tu gagneras en possibilités & performances.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Par défaut
    c'est à dire, mes locales sont-elles correctes ? je voudrais un code qui ne s'occupe pas du pays où est hébergé la page en fait, je veux pouvoir lire de l'HTML d'un site espagnol, d'un site anglais, français, etc

  6. #6
    Membre expérimenté Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Par défaut
    quant julp parle des locales, il réfère aux règles sur ton serveur que les fonctions liées aux chaines de caractères sur ton serveur se conformeront, et non aux documents externes à ton espace internet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo setlocale(LC_CTYPE,null);
    devrait retourner pays, langue et charset sur ton serveur pour les fonctions sur les chaines de caractères.

    Citation Envoyé par Sephiroth Lune
    mon fichier .php est encodé en utf8
    pas toujours une bonne idée

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Vous ne récupérez pas les accents car la classe POSIX stricte (cas des fonctions ereg*) [:graph:] équivaut à [!-~] donc les caractères du code ASCII étendu (>= à 128) - dont fait partie les caractères accentués - ne correspondront jamais. On retrouve le problème avec [:alnum:] (équivalent de [A-Za-z0-9]). PCRE en revanche utilise les informations des locales donc les accents (entre autres) ne lui poseront pas de problèmes (à condition que l'environnement soit convenablement configuré). Vous l'ignorez peut être mais vous utilisez également les locales lors de simples comparaisons de chaînes.

    Un petit test :
    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
    <?php
    define('OK', '<span style="color: green">OK</span><br/>');
    define('KO', '<span style="color: red">KO</span><br/>');
     
    $tests = array(
        'pépé',
        'papa'
    );
     
    $patterns = array(
        '^[[:graph:]]+$',
        '^[[:alnum:]]+$'
    );
     
    foreach ($tests as $s) {
        foreach ($patterns as $p) {
            echo "Ereg $p, $s : " . (ereg($p, $s) ? OK : KO);
            echo "Preg $p, $s : " . (preg_match('#' . $p . '#', $s) ? OK : KO);
        }
    }
    ?>
    Citation Envoyé par Sephiroth Lune
    je veux pouvoir lire de l'HTML d'un site espagnol, d'un site anglais, français, etc
    Je vous ai pris au mot et j'ai testé sur une page cyrillique que j'ai converti en UTF-8 (librairie iconv) : pas moyen de récupérer un mot même en utilisant l'extension PCRE et son support de l'UTF-8 (même en passant par les propriétés des caractères Unicode).

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/12/2014, 11h19
  2. Réponses: 2
    Dernier message: 04/12/2011, 20h42
  3. Réponses: 0
    Dernier message: 01/02/2011, 20h45
  4. innerHTML qui ne gère pas les accents (à, é,è..)
    Par beegees dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 12/04/2009, 23h21
  5. Réponses: 2
    Dernier message: 16/10/2007, 15h40

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