我的内容首先是htmlentities
,然后stripslashes
后跟nl2br
。
这意味着最后的水印最终为:
<li><p><!-- watermark --></p></li>
不太有用。我有下面的代码尝试剥离html注释并停止显示,但它不是很擅长!
$methodfinal = str_replace('<li><p><!--', '<!--', $method);
$methodfinal2 = str_replace('--></p></li>', '-->', $methodfinal);
echo $methodfinal2;
谁有任何想法?
答案 0 :(得分:0)
这样的东西?
$final = preg_replace("/<li><p>(<!--.*-->)<\/p><\/li>/", "$1", $original);
答案 1 :(得分:0)
编辑: 跟随Zed和你的评论我做了一些测试,这就是你应该使用的:
$final = preg_replace('/<li><p>[\s]*?<\;!--(.*?)-->\;<\/p><\/li>/m', "<!--$1-->", $z);
以下是RE的细分:
<li><p>
这很明显
[\s]*?
因为<li>
和评论之间有一些空格和换行符,但是我们想要最少的换行符,所以我们使用非贪婪*? (它也适用于*)
<\;
需要逃避;
!--(.*?)--
我们再次使用*?所以我们只匹配这一行(如果你再次使用相同的行,则从第一行到最后一行匹配
>\;<\/p><\/li>
与上述相同
/m'
所以php会把换行视为空格(我不确定这个,但似乎有效)
答案 2 :(得分: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
只是想提倡更好的正则表达式练习。希望这会有所帮助。