0

私はすでにSOでこれを見つけることを期待していました...しかし今のところまだありません

私はHTMLエンコードされた文字列を見る正規表現について話している:例えばのようなもの

blip ♦ trout’s mouth

&\w+;すべての拠点をとでカバーしました&#[0-9]+;か?

$encoded_string = htmlspecialchars($_GET["searchterms"]);
echo "<b>Search results for submitted string: \"$encoded_string\"</b><br><br>";
$html_special_chars_pattern = "!(&\\w+;|&#[0-9]+;)!";
$non_html_tokens = preg_split( $html_special_chars_pattern, $encoded_string, -1, PREG_SPLIT_DELIM_CAPTURE );
4

2 に答える 2

4

&#xH;または&#XH;数字の参照がありません。

5.3.1数値文字参照

数値文字参照は、ドキュメントの文字セット内の文字のコード位置を指定します。数値文字参照には、次の2つの形式があります。

  • 構文「&#D;」(Dは10進数)は、ISO10646の10進数の文字番号Dを参照します。

  • 構文「&#xH;」または「&#XH;」(Hは16進数)は、ISO 10646の16進数文字番号Hを指します。数字参照の16進数は、大文字と小文字を区別しません。

つまり&#[xX][a-fA-F0-9]+;、正規表現で。

于 2012-12-16T13:39:35.780 に答える
1

以前の関連記事を回答としてここに載せました。他の誰かがより良い解決策を思いついた場合、またはそれが壊れた理由を教えてください:)

preg_match_all('/&(?:[a-z]+|#\d+);/', $content, $matches);

16進エンティティもサポートするには:

preg_match_all('/&(?:[a-z]+|#x?\d+);/i', $content, $matches);

ところで、(?: ... )メモリキャプチャを防ぐために使用されます。参照:このPerl正規表現での `?`はどういう意味ですか?

于 2012-12-16T13:37:17.267 に答える