Page 1 sur 1

probleme avec preg_replace

Posté : 23 juil. 2011, 14:35
par hakazizi
Bonjour je voudrais récupérer le titre d'une page web le problème c'est que le preg replace ne fait rien il ne retire pas le title.
En espérant que pour la balise meta description ce sera plus facile (je ne m'y suis pas encore attaque vue que je bloque déjà sur le titre).
<?php
$site=strtolower(file_get_contents('http://www.site.com'));
$modif=preg_replace("/<title>[a-z0-9 éèêëàâäîïûùüôöøç.,\?;:\#&@'\+\-]<\/title>/","//",$site);
echo $modif;
$site_modifier=str_replace($modif,'',$site);
//echo $sitemodifer;
?>

Re: probleme avec preg_replace

Posté : 23 juil. 2011, 14:56
par Ryle
C'est sans doute parce que ton titre fait plus d'un caractère alors que ton expression ne recherche qu'un seul caractère entre les balises <title></title> ... ;)

Tu peux ajouter un + ou une * selon ce que tu veux obtenir pour recherche de 1 à N ou de 0 à N caractères :)

Re: probleme avec preg_replace

Posté : 23 juil. 2011, 19:20
par hakazizi
Merci ryle mais j'ai choisit une autre route mais j'ai encore un problème. car c'est beaucoup plus simple.
ne fonctionne pas
<?php
$site=strtolower(file_get_contents('http://www.site.com'));
$modif=preg_replace("/.*<title>/","",$site);
$modif=preg_replace("/<\/title>.*/","",$modif);
echo htmlentities($modif);
?>
alors que
<?php
$site=strtolower(file_get_contents('http://www.site.com'));
$modif=ereg_replace(".*<title>","",$site);
$modif=ereg_replace("</title>.*","",$modif);
echo htmlentities($modif);
?>
fonctionne parfaitement.
Le souci c'est que ereg est en sursis et il va bientôt disparaître.
Je voudrais savoir quel est l'équivalent de ".*" d'ereg en preg.
Merci.

Re: probleme avec preg_replace

Posté : 27 juil. 2011, 20:55
par hakazizi
En fait après quelques recherches c'est la même chose mais je ne comprend pas pourquoi cela ne fonctionne pas.
En ajoutant des parenthèse cela n'apporte pas grand chose.
J’ai également viré le "strtolower" et j'ai ajouté le i pour que la fonction soit insensible à la casse.
Merci.
mon code est ci-dessous.
<?php
 $site=file_get_contents('http://www.site.com');
 $modif=preg_replace("/(.*)<title>/i","",$site);
 $modif=preg_replace("/<\/title>(.*)/i","",$modif);
 echo htmlentities($modif);
 ?>
 

Re: probleme avec preg_replace

Posté : 27 juil. 2011, 21:10
par jojolapine
J'ai pas vraiment compris pourquoi tu utilises un classe si compliquée dans ton premier exemple...
pourquoi ne pas simplement faire:

Code : Tout sélectionner

#<title>.+</title>#i
Puisqu'à priori tu n'auras qu'une seule balise title dans la page... Non ?
Quel est le but final de l'opération?
On ne comprend pas trop, tu veux obtenir le contenu de <title /> ? le remplacer, virer carrément la balise?

Re: probleme avec preg_replace

Posté : 27 juil. 2011, 21:21
par hakazizi
merci jojolapine.
Ma finalité est de recuperer le titre d'une page d'un site ainsi que le contenu de la balise metat description les stocker dans une bd pour alimenter un moteur de recherche.
je viens de tester et cela ne fonctionne pas mieux voici le code j'ai adapter ce que tu m'as dit.
<?php
$site=file_get_contents('http://www.larosedelorient.com');
$modif=preg_replace("#.+<title>#i","",$site);
$modif=preg_replace("#</title>.+#i","",$modif);
echo htmlentities($modif);
?>

Re: probleme avec preg_replace

Posté : 27 juil. 2011, 21:32
par jojolapine
Voici un exemple fonctionnel : http://lumadis.be/regex/test_regex.php?id=848
Utilise plutôt preg_match() pour récupérer du contenu.
Bonne continuation ;)

Re: probleme avec preg_replace

Posté : 27 juil. 2011, 22:42
par hakazizi
encore merci jojolapine tu vient de me debloquer.
Et ci dessous le code pour ceux que cela interresse.
<?php
$site=file_get_contents('http://www.larosedelorient.com');
preg_match("#<title>(.*)</title>#si",$site,$modif);
$titre=str_ireplace(array('<title>','</title>'),'',$modif[0]);
preg_match("#meta.+name=description.+content=(.+).+/?>#iU",str_replace(array('"','<'),'',$site),$modif1);
$description=preg_replace("#meta.+content=||>#i","",$modif1[0]);
echo htmlentities($titre);echo"<br>".htmlentities($description)."";
?>

Re: probleme avec preg_replace

Posté : 27 juil. 2011, 22:51
par jojolapine
Tu faits beaucoup de manipulations pour rien ;)

Essaye de faire ceci:
<?php

$site=file_get_contents('http://www.larosedelorient.com');

preg_match("#<title>(.*)</title>#si",$site,$modif);
var_dump($modif);
preg_match("#meta.+name=description.+content=(.+).+/?>#iU",str_replace(array('"','<'),'',$site),$modif1);
var_dump($modif1);
Tu verras qu'il y a tout ce qu'il faut dans le tableau de résultat ;)
Autre question, pourquoi enlève tu le chevron (<) pour la deuxième regexp ?

Re: probleme avec preg_replace

Posté : 27 juil. 2011, 22:53
par stealth35
pour parser du HTML c'est DOMDocument et pour les balise meta y'a get_meta_tags