0

我的内容是首先htmlentities,然后stripslashesnl2br.

这意味着最后的水印最终为:

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

不是很有用。我有下面的代码来尝试剥离 html 注释并停止它的显示,但它不是很擅长!

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

有人有什么想法吗?

4

3 回答 3

0

像这样的东西?

$final = preg_replace("/<li><p>(<!--.*-->)<\/p><\/li>/", "$1", $original);
于 2009-08-01T19:06:11.950 回答
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

@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 回答