2009-02-13 5 views
4

J'utilise actuellement Zend_Filter_StripTags dans un système de commentaire, mais un peu de casse quand '< 3' est entré. StripTags ne semble pas assez intelligent pour réaliser qu'il ne s'agit pas d'une balise HTML, et la création du filtre comme "nouveau Zend_Filter_StripTags (array ('3'))" ne semble pas fonctionner non plus.Zend Framework Filtrez les StripTags d'entrée et "<3"

Dois-je d'abord passer l'entrée via une expression rationnelle, ou y a-t-il un moyen d'obtenir que Zend_Filter_StripTags se redressent et volent à droite?

+0

Avez-vous envisagé de ne pas filtrer, mais simplement de convertir des caractères potentiellement dangereux en entités HTML à la place (htmlspecialchars() en PHP)? –

+0

strip_tags() (ou son wrapper ZF) est plus adapté aux utilisations comme obtenir du contenu en texte brut à partir d'un morceau de HTML déjà-aseptisé. Pour ce que vous faites (parsing HTML sensible au contexte) un effort un peu plus substantiel est nécessaire. – flussence

Répondre

5

Terminé en écrivant une classe Zend_Filter qui était fondamentalement un wrapper pour HTMLPurifier. Fonctionne parfaitement, car HTMLPurifier est beaucoup plus intelligent que striptags.

1

Je ne connais pas Zend beaucoup, mais si vous voulez que des choses comme <3 soient autorisées, faites simplement htmlspecialchars au lieu de strip_tags dessus.

1

Ce que vous voulez, c'est probablement Zend_Filter_HtmlEntites.

Voir: Zend_Filter_HtmlEnties

+0

Zend_Filter_HtmlEnties est essentiellement un wrapper pour htmlentities, ce qui n'est pas ce dont j'ai besoin, parce que certains html (éléments de base comme 'a', 'b', etc.) doivent être autorisés. –

1

Le problème avec htmlspecialchars et Zend_Filter_HtmlEntities est que si vous essayez de dépouiller toutes les balises HTML (comme « a » et « img », etc.), puis au lieu de les dépouiller, vous finir avec ce balisage dans votre sortie.

Prenez des commentaires sur un blog par exemple. Si vous utilisez htmlspecialchars ou Zend_Filter_HtmlEntities, dans un commentaire où quelqu'un essaie d'utiliser html pour entrer un lien, vous obtenez ce balisage lorsque vous affichez le commentaire. Mais si vous utilisez strip_tags ou Zend_Filter_StripTags, vous finissez par altérer le commentaire, car ni l'un ni l'autre n'est assez intelligent pour réaliser que '< 3' n'est pas un tag, et supprime tout de '< 3' jusqu'à la fin du commentaire (ou il trouve '>').

Ce serait bien si Zend avait quelque chose comme HTMLPurifier, où il vérifie et valide l'entrée avant de supprimer les balises. Cela signifie que des choses comme '< 3' se retrouvent seules, où des choses comme 'Awesome Site' deviennent 'Awesome Site'.

C'est un problème que j'essaie de contourner, et pour l'instant il semble que je vais finir par écrire ma propre classe Zend_Filter qui est fondamentalement une enveloppe pour HTMLPurifier.