0

htmlentities最初に があり、次にstripslashesが続くコンテンツがありnl2brます。

これは、最後の透かしが次のようになることを意味します。

<li><p><!-- watermark --></p></li>

あまり役に立ちません。以下のコードを使用して、html コメントを削除して表示を停止しようとしていますが、あまり得意ではありません。

$methodfinal = str_replace('<li><p><!--', '<!--', $method);
$methodfinal2 = str_replace('--></p></li>', '-->', $methodfinal);
echo $methodfinal2;

誰かアイデアはありますか?

4

3 に答える 3

0

@Zed:

もっと思いやりをしましょう:

$final = preg_replace("/<li><p>(<!--.*?-->)<\/p><\/li>/", "$1", $original);
# use .*? every time over .* unless you specificly want what it does
# .*? matches as less as it can
# .* matches as much as it can

さらに良い:

$final = preg_replace("/<li><p>(<!--[^\-\>]+-->)<\/p><\/li>/", "$1", $original);
# [^\-\>]+ will look for any character that is not - or > 
# so will perform faster

より良い正規表現の実践を提唱しようとしているだけです。お役に立てれば。

于 2009-08-10T05:01:35.707 に答える
0

編集:Zedとあなたのコメントに従って、いくつかのテストを行いましたが、これを使用する必要があります:

$final = preg_replace('/<li><p>[\s]*?&lt\;!--(.*?)--&gt\;<\/p><\/li>/m', "<!--$1-->", $z);

REの内訳は次のとおりです。

<li><p>

これは明白です

[\s]*?

<li>とコメントの間にいくつかのスペースと改行があるためですが、改行の数を最小限にしたいので、貪欲でない *? を使用します。(*でも動作するはずです)

&lt\;

; をエスケープする必要があります。

!--(.*?)--

ここでも *? を使用します。したがって、この行のみに一致します (同じ行が再びある場合は、最初のものから最後のものまで一致します)

&gt\;<\/p><\/li>

同上

/m'

そのため、phpは改行を空白として扱います(これについてはわかりませんが、機能しているようです)

于 2009-08-01T19:17:29.900 に答える
0

このようなもの?

$final = preg_replace("/<li><p>(<!--.*-->)<\/p><\/li>/", "$1", $original);
于 2009-08-01T19:06:11.950 に答える