SOS pour regexp

Pepsi33
Invité n'ayant pas de compte PHPfrance

01 mai 2010, 06:07

Bonjour à tous,

j'ai un problème avec une expression régulière, et plus particulièrement les chevrons qui semblent ne jamais être matchés.

Exemple :
J'ai une expression : "XML version=1.3<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.00//EN">" (c'est un exemple)
mais j'ai beau faire n'importe quoi, une expression avec chevron (< ou >) n'est JAMAIS matchée.

Le code suivant affiche 'no match' :

Code : Tout sélectionner

if (preg_match_all ('/.*<.*/', $expression, $urls)) print_r ($urls); else echo "no match";


alors que ceci marche parfaitement :

Code : Tout sélectionner

if (preg_match_all ('/.*HTML.*/', $expression, $urls)) print_r ($urls); else echo "no match";

D'où cela peut-il venir ? Merci beaucoup.

PS : j'offre le champagne à celui qui arrive à me sortir de cette galère (cela fait deux heures que je suis dessus).

ViPHP
ViPHP | 2287 Messages

01 mai 2010, 08:22

Bonjour,

ton exemple marche :
<?php
$expression = '"XML version=1.3<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.00//EN">"';

if (preg_match_all ('/.*<.*/', $expression, $urls))
      print_r ($urls);
else
   echo "no match";

Code : Tout sélectionner

Array ( [0] => Array ( [0] => "XML version=1.3<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.00//EN">" ) )
Alors il y a quelquechose qui change entre ce que tu fais et l'exemple que tu as donné qui explique sûrement ton souci ;) Un retour à la ligne peut-être ? ou un problème de charset ?
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Invité
Invité n'ayant pas de compte PHPfrance

01 mai 2010, 15:37

Merci pour ta réponse.
En fait, l'expression est récupérer depuis une page internet avec $result = htmlentities (file_get_contents (url)).

Quand j'affiche $result, j'obtiens bien une expression avec des chevrons un peu partout, par exemple :

Code : Tout sélectionner

</li><li><a href="http://fr.test.search.ff.com/search/images?ei=UTF-8&p=%2&fr2=tab-web&fr=yfp-t-703">Images</a></li><li><a href="http://fr.test.search.gg.com/search/video?ei=UTF-8&p=%2&fr2=tab-web&fr=yfp-t-703">Vidéo</a></li><li>

Est-ce possible que cela vienne du htmlentites ou de file_get_contents ?

Merci

Pepsi33
Invité n'ayant pas de compte PHPfrance

01 mai 2010, 15:53

J'ai (partiellement trouvé ma réponse).
J'ai remplacé htmlentities par htmlspecialchars, du coup les chevrons sont remplacés par leur équivalent (< = < par exemple).

Mais comment faire pour ne pas que les chevrons et autres caractères spéciaux soit remplacés ?

Merci

Mammouth du PHP | 985 Messages

01 mai 2010, 16:24

Il faut toujours ou presque utiliser htmlentities ou htmlspecialchars juste au moment de l'affichage des données.

Effectue tous tes traitements de données avant d'utiliser ces deux fonctions.
Donc, utilise tes regs avant et ensuite au moment d'afficher le résultat, utilise htmlentities ou htmlspecialchars par exemple avec echo...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.