2010-08-10 21 views
1

J'ai installé CKeditor sur un site client qui leur permet d'entrer du texte en utilisant un éditeur WYSIYG. Il est verrouillé pour la plupart, ne laissant gras, italique, listes à puces, etc.Comment supprimer le "balisage vide" avec PHP - c'est-à-dire plusieurs éléments imbriqués sans nœud de texte

Je lance également à l'utilisateur HTML soumis par HTML purifier pour vous assurer qu'ils ne reçoivent pas intelligent et commencer à essayer d'ajouter des tables , par exemple. C'est aussi une bonne idée de limiter ce qu'ils peuvent saisir pour les problèmes XSS, par exemple.

Je viens de regarder une partie de la sortie produite par le CKeditor/HTML combo épurateur, et vu cette atrocité ...

<p> 
    <span style="font-size:11px;"><br /></span></p> 

Y at-il de toute façon je peux configurer HTML Purifier ou utiliser autre chose pour supprimer des éléments sans noeud de texte? Il faudrait évidemment commencer au dernier descendant, puis lancer l'arborescence DOM, en supprimant le plus grand parent qui n'a pas d'éléments avec un nœud de texte.

Y a-t-il des cas limites à cette approche, en supposant qu'il n'y ait jamais d'éléments de présentation seulement dans ce balisage? Il n'y a pas d'éléments de fermeture automatique auxquels je puisse penser (par exemple des images, des éléments d'entrée, etc.).

+1

Pas facilement possible; en particulier, il est difficile de dire si une étiquette br doit être enlevée ou non. –

Répondre

0

Vous pouvez utiliser la fonction PHP strip_tags():

http://de3.php.net/manual/en/function.strip-tags.php

Ceci effacera toutes les balises html, sauf ceux que vous entrez comme paramètre secound. Dans votre cas pour permettre gras, italique et lis désordonnées que ce serait:

$text = strip_tags($text, '<b><i><ul>'); 

Bien sûr, il peut encore être vides après cela, mais vous pourrait sûrement se débarrasser des span et p balises avec cela.