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/09/2006, 12h27   #1
Invité régulier
 
Inscription : mai 2005
Messages : 33
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mai 2005
Messages : 33
Points : 7
Points : 7
Envoyer un message via MSN à Pallas4
Par défaut regex et lien cliquable

Bonjour

J'ai essayé de faire une regex pour faire une url cliquable à partir d'url écrites telles quelles dans un champ texte (comme dans les forums en fait)
Code :
$texte = $texte = preg_replace('#([^src=\"]|[^url\=])http://[a-z0-9._/-]+\.[a-z]+/([a-z0-9._/-])*(\?[a-z0-9._/-]+\=[a-z0-9._/-]+)#i', '<a href="$0">$0</a>', $texte);
En fait, je regarde s'il n'y as pas des balises devant pour éviter les problèmes. Ensuite, je commence par regarder le nom de domaine, puis le . puis l'extention. Ensuite je regarde s'il n'y a pas un nom de dossier. Enfin je regarde s'il n'y a pas un paramètre. jusque là ça va.

Code :
$texte = $texte = preg_replace('#([^src=\"]|[^url\=])http://[a-z0-9._/-]+\.[a-z]+/([a-z0-9._/-])*(\?[a-z0-9._/-]+\=[a-z0-9._/-]+\&?)*#i', '<a href="$0">$0</a>', $texte);
là j'ai rajouté une étoile à la fin et un \&? un peu avant. Mais PHP me remplace automatiquement le & par &amp; et les liens du genre :
http://nom_de_domaine.ext?page=1&pag=2 deviennent :
http://nom de domaine.ext?page=1&amp;pag=2

quelqu'un a une idée ?
Merci
(PS je sais on trouve des regex sur les liens cliquables un peu partout mais j'aimerais comprendre mon erreur).
Pallas4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2006, 12h57   #2
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
ton erreur c'est que, quelque part dans ton traitement, AILLEURS que dans la regexp, tu utilise htmlentities ou htmlspecialchars avant d'afficher ta donnée...

A noter qu'il est fortement conseillé de laisser cette fonction telle quelle, car l'enlever veux dire autoriser les balises comme <script> ou <iframe> qui sont des sources potentielles de problemes de sécurité. sinon tu remplace htmlentities par une fonction qui remplace *au moins* < par &lt; pour eviter ce genre de problemes
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag 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 08h59.


 
 
 
 
Partenaires

Hébergement Web