2010-01-30 5 views
1

J'ai fait beaucoup de recherches sur google, car ces types de problèmes ont été beaucoup demandés dans le passé. Mais je n'ai rien trouvé qui corresponde à mes besoins. J'ai un texte au format html à partir d'un formulaire. Juste comme ceci:PHP: Filtrer les balises html spécifiques d'un texte donné

Hey, I am just some kind of <strong>formatted</strong> text! 

Maintenant, je veux enlever toutes les balises html, que je n'autorise pas. La méthode intégrée strip_tags() de PHP le fait très bien.

Mais je veux aller plus loin: je veux autoriser certaines balises uniquement à l'intérieur ou à l'extérieur d'autres balises. Je veux aussi définir mes propres balises XML.

Un autre exemple:

I am a custom xml tag: <book><strong>Hello!</strong></book>. Ok... <strong>Hi!</strong> 

Maintenant, je veux le <strong/> intérieur de <book/> à décaper, mais le <strong>Hi!</strong> peut rester comme il est. Donc, je veux définir quelques règles de ce que j'autorise ou ne permets pas, et je veux que tout filtre fasse le reste.

Y a-t-il un moyen facile de faire cela? Regexp ne sont pas ce que je recherche, car ils ne peuvent pas analyser html correctement.

Cordialement, Jan Oliver

Répondre

1

Utilisez un second argument strip_tags, ce qui est des balises admissibles.

$text = strip_tags($text, '<book><myxml:tag>'); 

Je ne pense pas qu'il y ait un moyen de dépouiller seulement certaines balises si elles ne sont pas dans d'autres balises, sans utiliser regex.

En outre, regex ne sont pas pas bon à l'analyse HTML, mais il est lent par rapport aux options. Mais ce n'est pas ce que vous faites ici, de toute façon. Vous passez par la chaîne et en supprimant les choses que vous ne voulez pas. Et pour votre exigence complexe, je pense que votre seule option est d'utiliser regex.

Pour être tout à fait honnête, je pense que vous devriez décider quelles étiquettes sont permises et lesquelles ne le sont pas. Si elles sont ou non à l'intérieur d'autres étiquettes ne devrait pas importer du tout. C'est un balisage, pas un script.

+0

Regex * sont bons * à * *, * mais * ils sont mauvais * à * analyse *. – Gordon

2

Ne pense pas qu'il y a une telle chose, je pense même pas HTML Purifier fait cela.

Je vous suggère d'analyser manuellement le XHTML en utilisant quelque chose comme Simple HTML Dom.

+0

C'était ma première approche, mais ce n'est pas si simple, car mon entrée n'est pas formatée au format xml. – janoliver

0

Le second argument montre que vous cal permettre quelques tags:

string strip_tags (string $str [, string $allowable_tags ]) 

De php.net

Questions connexes