Probleme de htmlentities et preg_replace

Fermé
milout - 8 sept. 2009 à 07:19
milout Messages postés 7 Date d'inscription samedi 5 septembre 2009 Statut Membre Dernière intervention 15 septembre 2009 - 8 sept. 2009 à 08:48
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 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
8 sept. 2009 à 07:53
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
<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 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
8 sept. 2009 à 08:18
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
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 samedi 5 septembre 2009 Statut Membre Dernière intervention 15 septembre 2009
8 sept. 2009 à 08:48
bon en faite je faisais n'importe quoi, merci moderno me trompait bien de fonction :(
0