Problème de remplacement avec preg_replace() ( HEEEELP ! :-( )

Problème de remplacement avec preg_replace() ( HEEEELP ! :-( ) - PHP - Programmation

Marsh Posté le 14-02-2008 à 16:03:18    

Bonjour,
 
J'ai le problème suivant :
 
Je publie des infos sur mon site, et je cherche à faire en sorte que chaque info soit visible sur le web avec les liens vers des sites externes que j'insère dans un champ de base de données. Exemple :
 

Mon texte ici <a href="http://www.xxx.com">avec un lien</a> et pourquoi pas <a href="http://www.yyy.com" class="toto">d'autres liens</a> et encore du texte...


 
Jusque là rien d'extraordinaire  :)  
 
Mais je veux que ce même texte puisse être affiché sur la version wap, en supprimant les liens vers les sites web externes (car ils ne s'afficheraient pas correctement sur un mobile, évidemment, puisque ce sont des liens vers des sites *WEB*).
 
Donc en gros je cherche une fonction PHP qui me supprime TOUS les <a ...> ...</a> avec des variantes éventuelles comme des espaces telles que < / a > pour que ça supprime même si on tape n espaces superflus dans les balises...
 
Bref une fonction qui me conserve tout le texte mais qui enlève tous les tags d'ouverture et fermeture de tous les liens.
 
Si je reprends mon exemple précédent, ça donnerait :
 

Mon texte ici avec un lien et pourquoi pas d'autres liens et encore du texte...


 
Mes recherches semblent m'indiquer que la fonction adéquate est preg_replace() mais j'ai fait plein de tests et je n'arrive pas à trouver le bon pattern. :cry:
 
Aaah les regexp patterns, toujours une galère  :(  Grmmmpf !... (je bougonne).
 
Quelqu'un aurait-il la solution siou plait ?  :jap:  
 
Un grand grand merci à qui saura m'aiguiller pour enlever cette épine du code  :hello:

Reply

Marsh Posté le 14-02-2008 à 16:03:18   

Reply

Marsh Posté le 14-02-2008 à 16:09:13    

Je précise que je ne peux pas utiliser la fonction strip_tags() de PHP, car j'ai besoin de supprimer juste les balises de liens en conservant les autres balises (car on peut afficher un texte en gras, par exemple, sur du wap) donc je veux pouvoir conserver des éléments en gras, italique, etc... en supprimant juste les liens

Reply

Marsh Posté le 14-02-2008 à 16:47:59    

Citation :

string strip_tags  ( string $str  [, string $allowable_tags  ] )
Le paramètre optionnel allowable_tags permet d'indiquer les balises qui doivent être conservées.


Et avec ca, tu ne t'en sors pas ?


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-02-2008 à 16:49:01    

Bon, alors je viens finalement de trouver la réponse, si ça peut aider quelqu'un dans les décenies ou siècles à venir (lol) :
 


$text='Je fais un essai < a href = "http://www.toto.com" >Mon texte ici</a> avec <a href="http://www.yoyo.com" class="">ca aussi< / a >';
 
 
$motif='`<[[:space:]]*a[^>]+?>(.*?)<[[:space:]]*/[[:space:]]*a[[:space:]]*>`';
$sortie='$1';
$texte=preg_replace($motif,$sortie,$text);
echo $texte;


 
Cette syntaxe fonctionne parfaitement, y compris si on tape des espaces supeflus dans les tags (comme <  a    href=""  >    <  /  a >   )
 
J'ai adapté le code trouvé au paragraphe 4 de ce cette page http://www.expreg.com/lire-URL-source  
d'un très bon site sur les regexp, en adaptant avec mes maigres connaissances de regexp (les [[:space:]] en l'occurence)
 
Elle permet donc de supprimer des liens dans un texte ou une chaîne en PHP  
(je mets ces mots-clés pour que quelqu'un puisse trouver cette solution un jour sans galérer comme moi  ;) )
 
Je n'ai pas tout compris, notamment la ligne :
 

$sortie='$1';


 
Pourquoi $1 ?
 
Je n'aime pas avoir une syntaxe qui marche sans savoir pourquoi elle marche  :sarcastic:  mais bon, le principal c'est qu'elle marche, je vais chercher pourquoi et comment dans un deuxième temps...  :lol:  
 
Au plaisir...

Reply

Marsh Posté le 14-02-2008 à 16:56:32    

babasss a écrit :

Citation :

string strip_tags  ( string $str  [, string $allowable_tags  ] )
Le paramètre optionnel allowable_tags permet d'indiquer les balises qui doivent être conservées.


Et avec ca, tu ne t'en sors pas ?


 
Merci babass pour ta réponse, je ne savais pas qu'on pouvait spécifier des tags autorisés avec strip_tags, mais dans le principe ça ne me plaît pas trop, car plutôt que de dire quels tags HTML j'autorise (la liste serait longue et on risque d'en oublier), je préfère dire LE tag je veux supprimer, puisqu'il n'y a qu'un seul tag à supprimer (<a ...></a> ), c'est quand même plus simple  ;)  En tout cas merci pour ton aide.

Reply

Marsh Posté le 14-02-2008 à 17:01:35    

glc255 a écrit :


Merci babass pour ta réponse, je ne savais pas qu'on pouvait spécifier des tags autorisés avec strip_tags, mais dans le principe ça ne me plaît pas trop, car plutôt que de dire quels tags HTML j'autorise (la liste serait longue et on risque d'en oublier), je préfère dire LE tag je veux supprimer, puisqu'il n'y a qu'un seul tag à supprimer (<a ...></a> ), c'est quand même plus simple  ;)  En tout cas merci pour ton aide.


Je m'en doutais un peu  :D


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-02-2008 à 17:02:56    

glc255 a écrit :

Pourquoi $1 ?
Je n'aime pas avoir une syntaxe qui marche sans savoir pourquoi elle marche  :sarcastic:  mais bon, le principal c'est qu'elle marche, je vais chercher pourquoi et comment dans un deuxième temps...  :lol:  


Commence par le doc: http://fr.php.net/preg_replace ( paragraphe replacement)
 


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed