2

この正規表現の意味を誰か説明してくれませんか?

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

誰かが、strip_tags 関数を使用するよりも安全な方法でタグを削除する方法に追加しましたか? しかし、私は理解することができません。

これは、stackoverflow に関する私の最初の投稿です。何か間違ったことをしている場合はご容赦ください。

ありがとう!

4

3 に答える 3

2
#...#      the # and # are just characters to start en end a REGEX
           (you can use a lot of character for this)
#exi       the e, x and i flags. See the PHP.net site for information
           about it

<          the < character
(?!...)    a negative lookahead. The REGEX matches when the characters
           after this are NOT equal to one of those
[/a-z]     a character class, matches for the / character and the
           letters a - z
|          OR
(?<=\s)    a positive lookbehind. The REGEX maches when there is
           \s (whitepspace) before
>          the > character
(?![a-z])  negative lookahead for the letters a - z

なので、基本的にはタグとして使われていない全て<>文字にマッチします。たとえば、<fooand</fooは一致しfoo>ません。でも1 < 3合います。htmlentitiesこれは関数に渡され、になり1 &lt; 3ます。strip_tagsこれで、タグのみを削除するために使用できます。

于 2013-04-02T09:22:42.383 に答える
0

< または > の後の次の文字が数字であるかどうかに基づいて、HTML タグではないものを判断しようとしているように見えます。

これは、次のようにキャプチャすることを意味します<

<span>This is <5 ml.</span>

そして、それをその文字に相当する HTML エンティティに置き換えてstrip_tags、文字列の意味を破壊することなく安全に使用できるようにします (参照されている質問で説明されているように)。

于 2013-04-02T09:23:54.423 に答える
0

<次が続いていないものを探しますa-z

また

スペースが続き、次にスペースが続き>ませんa-z

htmlentities('$0')次に、$0 がマッチ全体である場所に置き換えます。

iオプションは大文字と小文字を区別しません

e通常の置換を行います

x文字通りの空白を無視します

于 2013-04-02T09:26:26.083 に答える