|
|
|
|
Je suis actuellement en train de coder des Regex en Javascript pour la sécurité des formulaires de mon site car j'utilise AJAX pour les traiter (XMLHttpRequest) et je voudrais donc faire le ménage avant au niveau du texte.
Je me suis penché sur la question des balises (HTML, BBCode, etc.) et de l'éventuel parsage qui va avec (ex. pour le BBCode) et, après réflexion, je me suis dis que le plus simple était encore de faire une white list, i.e. limiter les balises HTML utilisables dans les formulaires.
Je souhaite donc restreindre les balises HTML utilisables aux balises "b", "u", "i" et "code" (une balise faisant plus d'un caractère).
En fait, je voudrais faire exactement comme pour ce site qui utilise des balises personnalisées : "gras", "souligne", etc. et arriver à éliminer toutes les balises HTML sauf les balises de ma white list.
N'étant pas un expert, je suis arrivé à la Regex suivante mais elle ne marche que pour une seule balise de ma white list :
/</?[^b][^>]*>/giCette Regex supprime toutes les balises HTML sauf les balises "b" (j'ai pe pas fais tous les cas possibles mais ça semble bien marcher)
Mais il y a plus simple:
|
Dans ce cas, tu peux faire une regexp de remplacement avec une callback
|
Salut.
$message=preg_replace('#<(b|gras)>(.+)</\1>#U','<b>$2</b>',$message);
-Tu remplaces les balises autorisées : $message=preg_replace('#<(a|div|etc...)>(.+)</\1>#sU','<$1>$2</$1>',$message);
C'est vria qu'on pourrait quand même avoir besoin d'un preg_replace_callback (ce que cite sebsauvage) pour vérifier qu'il n'y pas n'importe quels attributs (je pense a onclik, et tout ce que l'on peut faire en JS) a plus Sylvain Longue vie à bobo ! |
Hé... une minute. Tu parles de Javascript ?
$message=preg_replace('#<(b|gras)>(.+)</\1>#U','<b>$2</b>',$message);Je vois mal comment tu fais pour virer (avant ou après) toutes les autres balises HTML (ie non autorisées) de ton texte... puisque tu ne te retrouves qu'avec des balises HTML, ie balise entre < et >.
En fait, ta solution va bien dans le cas d'un parser BBCode par exemple (remplacer des balises personnalisées par des balises HTML) mais ce n'est pas ce que je veux (ne garder que certaines balises HTML)... d'autant que je connais déjà les Regex et que j'avais déjà écarté ta solution. Je n'aurais pas posé la question si j'avais voulu faire un simple parser... chose que je sais déjà faire depuis longtemps. C'est pour ça que j'aurais aimé trouvé une Regex qui me supprime toutes les balises HTML non autorisées (et leur contenu) pour ne pas avoir à me trouver avec un mélange de balises entre < et > Un truc du genre : /</?[^b][^>]*>/gimais qui marche avec toutes les balises autorisées. Comme ça tu te retrouves avec un texte propre direct... Donc existe t-il ce genre de Regex en Javascript car en php, suffirait d'utiliser la fonction strip_tags() avec en 2nd paramètre les balises à ne pas supprimer.
|