我的内容首先是htmlentities,然后是stripslashes,然后是nl2br

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

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

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

$methodfinal = str_replace('<li><p><!--', '<!--', $method);
$methodfinal2 = str_replace('--></p></li>', '-->', $methodfinal);
echo $methodfinal2;
谁有任何想法?

有帮助吗?

解决方案

编辑: 跟随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会把换行视为空格(我不确定这个,但似乎有效)

其他提示

这样的东西?

$final = preg_replace("/<li><p>(<!--.*-->)<\/p><\/li>/", "$1", $original);

@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

只是想提倡更好的正则表达式练习。希望这会有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top