Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/03/2007, 23h24   #1
Futur Membre du Club
 
Inscription : février 2003
Messages : 89
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 89
Points : 15
Points : 15
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 ?
Sephiroth Lune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 08h44   #2
Membre éclairé
 
Avatar de TucSale
 
Inscription : novembre 2005
Messages : 265
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : novembre 2005
Messages : 265
Points : 301
Points : 301
Envoyer un message via MSN à TucSale
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:]
TucSale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 11h54   #3
Futur Membre du Club
 
Inscription : février 2003
Messages : 89
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 89
Points : 15
Points : 15
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
Sephiroth Lune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 14h09   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 15h11   #5
Futur Membre du Club
 
Inscription : février 2003
Messages : 89
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 89
Points : 15
Points : 15
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
Sephiroth Lune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 16h54   #6
Membre habitué
 
Avatar de daniel61
 
Inscription : décembre 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 109
Points : 120
Points : 120
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 :
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
daniel61 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 18h05   #7
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h18.


 
 
 
 
Partenaires

Hébergement Web