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 21/04/2011, 19h55   #1
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
Par défaut regex qui enlève les liens mais garde le texte

bonjour,

j'ai cette regex qui me supprime les liens

Code :
echo preg_replace("/<a href(.*?)<\/a>/si", "", $text);
ça marche bien mais mon problème est que ça supprime le texte ou il y'a le lien

par exemple

Code :
<a href="http://www.toto.fr">exemple</a>

il m’enlève bien la balise <a href> mais aussi le texte "exemple"

y'a t'il un moyen de virer les liens en gardant le texte du lien

merci de votre aide
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 20h59   #2
Membre régulier
 
Inscription : novembre 2010
Messages : 102
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 102
Points : 86
Points : 86
Salut,


Citation:
Function called:
preg_match('#<a href=".+">(.+)<\/a>#', '<a href="http://www.toto.fr">exemple</a>');

Function returned:
int(1)

Resultset:
Array
(
[0] => <a href="http://www.toto.fr">exemple</a>
[1] => exemple
)
Soull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 21h05   #3
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
Code :
echo preg_replace("/<a href(.*?)>(.*)<\/a>/si", '$2', $text);
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 12h34   #4
Modérateur
 
Avatar de Nesmontou
 
Homme Benjamin PREVOT
Architecte de système d'information
Inscription : septembre 2004
Messages : 1 568
Détails du profil
Informations personnelles :
Nom : Homme Benjamin PREVOT
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Finance

Informations forums :
Inscription : septembre 2004
Messages : 1 568
Points : 2 493
Points : 2 493
Bonjour,

Je pense qu'il vaudrait mieux utiliser l'expression régulière suivante
Code :
1
2
3
4
<?php
$str = 'test <a href="http://www.developpez.com">lien</a> test <a href="http://www.developpez.com">lien</a> test';
echo preg_replace('#<a[^>]*>([^<]*)</a>#i', '$1', $str);
?>
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

F.A.Q. : Java, PHP, (X)HTML / CSS

N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème
Nesmontou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 13h19   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pour ceux qui aiment la simplicité y'a strip_tags...

Code :
1
2
$str = 'test <a href="http://www.developpez.com">lien</a> test <a href="http://www.developpez.com">lien</a> test';
echo strip_tags($str);
sinon encore une fois pour parser du HTML c'est DOMDocument
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/04/2011, 13h37   #6
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Je ne peux que plussoyer stealth35 pour le coup. Les 2 solutions que j'aurais données =)

Pour les anglophones : http://nu.x10.bz/regexhtml
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 14h03   #7
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
merci pour vos réponses

j'ai testé la solution strip_tags de stealth35 , ça fonctionne , mais ça enlève les autres balises ( retour à la ligne etc..) du coup le texte perds sa mise en forme

est ce que l'on peut mettre des options avec strip_tags , genre n'enlever que les balises <a> ?



la solution de Nesmontou fonctionne avec l'exemple donné mais moi j'ai un lien de ce type

Code :
<A href="/la_page_toto.html?varid=01&amp;var2ID=002" target=_self><STRONG><FONT color=#0000ff>exemple</FONT></STRONG></A>
et la ça ne fonctionne pas il laisse les liens

je n'ai pas testé les autres solutions , ce que je vais faire

encore merci
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 14h11   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
ça se règle dans le 2eme paramètre de strip_tags il faut mettre les balises que tu gardes
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 14h19   #9
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
pour la solution de vorace

Code :
	echo preg_replace("/<a href(.*?)>(.*)<\/a>/si", '$2', $text);

avec ce texte

Code :
<P>avec <STRONG>25 </STRONG><A href="/sitetoto.html?nodeID=20&amp;varID=03" target=_self><STRONG><FONT color=#0000ff>parcs sauvage</FONT></STRONG></A>  il est composé  de territoires emblématiques et <A href="/zozo.html?varID=952" target=_self><FONT color=#0000ff>magniquement</FONT></A> naturel

sur ce lien

Code :
<A href="/sitetoto.html?nodeID=20&amp;varID=03" target=_self><STRONG><FONT color=#0000ff>parcs sauvage</FONT></STRONG></A>

ça fonctionne il enlève le lien en laissant le texte

par contre dans la suite du texte

Code :
il est composé  de territoires emblématiques et <A href="/zozo.html?varID=952" target=_self><FONT color=#0000ff>magniquement</FONT></A> naturel,


il laisse le lien
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 14h27   #10
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
merci stealth35

Code :
j'ai fait echo strip_tags($text, '<p><br/>');

ça fonctionne nickel

encore merci

question subsidiaire , je voudrais enlever la chaine de caractères suivante

Retour haut de page >>

encore merci pour la solution
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 14h33   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
avec str_replace
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 14h49   #12
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
merci stealth35

j'ai fait

Code :
1
2
3
4
5
6
$text = strip_tags($text, '<p><br/><STRONG>');
 
 $degage = array("Retour haut de page >>");
$text = str_replace($degage, "", $text );
 
echo $text ;
peut être un peu compliqué mais ça marche !
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 14h51   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pas besoin d'array

Code :
1
2
3
4
5
6
$text = strip_tags($text, '<p><br><strong>');
 
$degage = 'Retour haut de page >>';
$text = str_replace($degage, '', $text );
 
echo $text ;
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 16h46   #14
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
merci !
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h33.


 
 
 
 
Partenaires

Hébergement Web