2 に答える
残念ながら、バランスの取れていないタグをブラウザに強制的に解釈させる方法はありません。次のシナリオを考えてみましょう。
<b>foo <i>bar</b> baz</i>
タグをそのままにして、次のようにレンダリングする必要があります
フーバーバズ_ _
、またはブラウザは<i>
タグが子であると想定して終了タグを移動する必要がありますか? それとも、ユーザー<b>
は子であり、その終了タグを移動することを意図していたのでしょうか?
ユーザー マークアップを許可し、レンダリングの問題を回避したい場合は、開始タグと終了タグの合計数を数えて、それらのバランスが取れていることを確認する (バランスが取れていない場合はすべてのタグを削除する) か、または上記のホーレンの回答のような防弾サービス。
また、ユーザーが HTML を送信できるようにすることは、おそらく非常に賢明ではありません。特定のタグをブラックリストに登録したとしても、おそらく他の多くのエクスプロイトが開かれたままになっているでしょう. ユーザーが制限された Markdown または BBcode を入力できるようにしてから、許可した文字を HTMLに変換する方がはるかに優れています。
ソースコードをきれいにして修正するphp tidyのようなhtmlサニタイザーを使用できます。
別のオプションのAFAIKはHTML Purifierです