ユーザーがグローバル通知をシステムに投稿できるフォームがあります (他のユーザーが見ることができるように)。
システムは、DB から直接 HTML を出力します (ユーザーが通知を見たい場合)。
一部の html タグはそのままにして、残りのタグには htmlspecialchars() を適用したいと考えています。
もう応募してみた
str_replace($search, $replace, htmlspecialchars($str))
戦略ですが、本当に遅いようです。実際、遅すぎます。また、常に機能することは安全ではありません。これに代わるものはありますか?
タグをストライピングする代わりに、許可されていないタグに htmlspecialchars を適用することを除いて、strip_tags() ジョブを実行するものが必要でした。
ADD(ed) info (by request):
$str は考えられる任意のサイズにすることができます。最悪のケースのシナリオの 1 つをテストするという理由で、大きな文字列 (1M 文字 (許可されたタグと許可されていないタグを含むランダムに生成された 1M 文字。すべてのタグには属性がありました) を使用することを考えました。ロジック: このように機能する場合は、サーバーは完全なstr_replace
(htmlspecialchars を使用) を処理するのに 5 秒かかりました. このテストは 2GHz CPU と DDR3 RAM を搭載した私のコンピューターで行われました.
$search と $replace の両方で合計 7 つの置換があります. それでもそれらは機能します. $search が誤検知または誤検知を与える場合もあります.
明確にするために、DB からの取得中ではなく、DB への保存中にこれらの変更を適用します。