Probleme de htmlentities et preg_replace

milout -  
milout Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
alors j'ai un petit probleme que je n'arrive pas a résoudre . Pour simplifier j'inscris dans une db les messages de visiteurs et je racourci leur lien en balise [url] un peu comme sur certains forum.

$txt = preg_replace('#https?://[a-z0-9._/=&\?-]+#i', '<a href="$0">[lien]</a>', $txt]);


Donc la tout marche bien, le probleme c'est que je dois faire un htmlentities pour pas me faire sacager mon site (je le fais deja tres bien moi meme ! xO ) et donc ca me fou en l'air mon preg_replace.

Donc je me suis dis logiquement je fais (bon aucune idée du regex a faire apres le htmlentities) :
htmlentities ---> preg_replace ---> ? inscription db

Est-il possible de dire a htmlentities de laisser passer les liens ? bref aucune idée je suis un peu perdu sur ce coup :O

Si une personne pouvait me venir en aide, merci d'avance !

5 réponses

moderno31 Messages postés 872 Date d'inscription   Statut Membre Dernière intervention   92
 
Hello
htmlentities - Convertit tous les caractères éligibles en entités HTML
ce n'est peutre pas approrié pour ce qu tu veux faire.
tu devrais regarder
strip_tags — Enlève les balises HTML et PHP.
htmlspecialchars — Converti tous les caractères spéciaux en équivalent HTML.

Sinon la fonction htmlentities fait le bon traitement. si tu veux inverser, faut bricoler
0
milout
 
<quote>
Sinon la fonction htmlentities fait le bon traitement. si tu veux inverser, faut bricoler</quote>


c'est bien ce que je veux faire, inverser le htmlentities mais seulement pour ma balise de lien (sinon ca servirait a rien :o) et le probleme c'est que je suis pas tres bricoleur !
Si une personne a une piste pour démarrer .

merci
0
moderno31 Messages postés 872 Date d'inscription   Statut Membre Dernière intervention   92
 
si ce sont des scripts malveillants que tu veux te protéger, fait un str_replace des mots clés de SQL (insert, delete, update...) par "".
Et récupère seulement ton url sans la filtrer. Parce que là j'avoue ne pas bien comprendre pourquoi tu veux faire ça
0
milout
 
Oh je suis bête j'ai oublié de dire que les messages sont affichés (c'est une shoutbox) donc c'est pour éviter les codes js surtout.

je suis arrivé à recupérer un code pour une balise simple <a> , me reste plus qu'a trouver finalement le bon regex pour la balise <a href="blabla">[url]</a> .

Voila le debut du code pour ceux que ca interesse :

$txt = htmlentities(txt);
$in = '(<(/?(?:a)\b.*?)>)ie'; // me reste plus qu'a adapter le regex a ma balise
$txt = preg_replace($in, "'<'.html_entity_decode('$1').'>'",$txt);

Du coup sur cet exemple la balise <a> marche bien et toutes les autres sont modifier par htmlentities et donc sont affichées plutot qu'éxéxuté dans ma shoutbox (a 2fr50 on est d'accord !).

Voila jespere que je fais pas n'importe quoi oo
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
milout Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
bon en faite je faisais n'importe quoi, merci moderno me trompait bien de fonction :(
0