1


0

PHPで「空白マークアップ」を削除する方法-つまり テキストノードのない複数のネストされた要素

クライアントのサイトにCKeditorをインストールして、WYSIYGエディターを使用してテキストを入力できるようにしました。 ほとんどの部分がロックされ、太字、斜体、順序なしリストなどのみが許可されます。

また、http://htmlpurifier.org/ [HTML purifier]を介してHTMLを送信したユーザーを実行して、_smart_が取得されないようにして、たとえばテーブルを追加しようとします。 たとえば、XSSの懸念事項について入力できるものを制限することもお勧めします。

CKeditor / HTML Purifierコンボによって生成される出力の一部を見て、この残虐行為を見ました…​


とにかく、HTML Purifierを設定したり、他の何かを使用してテキストノードのない要素を削除したりできますか? 当然、最新の子孫から開始し、次にDOMツリーを実行して、テキストノードを持つ要素を持たない最も親を削除する必要があります。

そのマークアップにプレゼンテーションのみの要素が存在しないと仮定すると、このアプローチにはエッジケースがありますか? 私が考えることができる自己閉鎖要素は存在しません(例: 画像、入力要素など)。

1 Answer


0


PHPの `strip_tags()`関数を使用できます:

これにより、2番目のパラメーターとして入力したものを除き、すべてのhtmlタグが削除されます。 太字、斜体、および順序なしのlisを許可する場合、これは次のようになります。

$text = strip_tags($text, '');

確かにこの後も空のものがありますが、これで span`タグと p`タグを確実に取り除くことができます。