7

文字列に「より小さい」および「より大きい」記号が含まれている場合、strip_tags PHP 関数を使用すると問題が発生します。例えば:

私が行った場合:

strip_tags("<span>some text <5ml and then >10ml some text </span>");

私は得るでしょう:

some text 10ml some text

しかし、明らかに私は取得したい:

some text <5ml and then >10ml some text

はい、私は < を使用できることを知っています。と > ですが、私の例でわかるように、データは既に保存されているため、これらの文字を HTML エンティティに変換する機会はありません。

私が探しているのは、実際の HTML タグのみを取り除くために HTML を解析する賢い方法です。

そのデータの生成には TinyMCE が使用されたので、どのような場合でも実際の html タグを使用できることがわかっているのでstrip_tags($string, $black_list)strip_tags($string, $allowable_tags).

何か考えはありますか?

4

3 に答える 3

6

奇抜な回避策として、非 html ブラケットを次のようにフィルタリングできます。

$html = preg_replace("# <(?![/a-z]) | (?<=\s)>(?![a-z]) #exi", "htmlentities('$0')", $html);

その後、strip_tags() を適用します。これが特定の例および同様のケースでのみ機能することに注意してください。これはヒューリスティックな正規表現であり、他の意味を持つエスケープされていない山かっこから html タグを識別するための人工知能ではありません。

于 2011-02-14T18:55:31.187 に答える
4

「より大きい」および「より小さい」記号が必要な場合は、それらをエスケープする必要があります。

&gt;です >

&lt;は <

たとえば、これを参照してください: http://www.w3schools.com/html/html_entities.asp

于 2011-02-14T18:55:28.630 に答える
2

strip_tags() の代わりに、代わりに htmlspecialchars() を使用してください。

http://php.net/manual/en/function.htmlspecialchars.php

于 2011-02-14T19:17:42.420 に答える