我从TinyMCE的大量编辑和后处理输入中保存了一个类似的字符串(这是一个空段落)。
这就是echo之后的样子,在浏览器的HTML源代码中:
<p> </p>
现在,我需要删除那些空段落。
我已经尝试了
$output = str_ireplace("<p> </p>", "", $string);
$output = preg_replace("/<p> <\/p>/", "", $string);
$output = preg_replace("/<p>[ \t\n\r]*<\/p>/", "", $string);
$output = preg_replace("/<p>[\s]*<\/p>/", "", $string);
以及更多没有运气的变种。它仍然存在,完好无损。我也尝试过mb_ereg_replace并匹配
,这显然不是这样。
另一方面,这有效:
$output = preg_replace("/<p>.*<\/p>/", "", $string);
但当然也会删除带有实际内容的段落。
那个“类似太空”的角色还能做什么呢?我该如何匹配?
解决 感谢Ibizaman和这个帖子link,我找到了这个角色。它是unicode值。见http://unicodelookup.com/#160/1
这有效:
$output = preg_replace("/<p>[\x{00A0}\s]*<\/p>/u", "", $string);
正如mcrumley所指出的,这可能会更好:
"/<p>[\p{Zs}\s]*<\/p>/iu"
答案 0 :(得分:3)
您可以使用Unicode字符属性来匹配所有空格。 \p{Zs}
是“空格分隔符”,包括空格,不间断空格,精简空间等。您还可以使用\pZ
匹配所有分隔符,包括行分隔符和段落分隔符。有关详细信息,请参阅http://www.php.net/manual/en/regexp.reference.unicode.php。
$output = preg_replace("/<p>[\p{Zs}\s]*<\/p>/iu", "", $string);
答案 1 :(得分:2)
由于您不知道输出了哪个字符,因此首先使用输出unicode值的函数解析$string
的输出(请参阅this SO问题)。
或者,您可以采取相反的方式,只接受格式良好的段落:
$output = preg_replace("/(<p>[^a-zA-Z0-9]*<\/p>)/", "\1", $string);
免责声明:我已经在评论中提出这个问题,但由于它解决了问题,因此最好将答案放在未来参考中,我认为。
答案 2 :(得分:0)
'类似空格的字符'是\s
,这将使您的整行
$output = preg_replace("/<p>\s*<\/p>/", "", $string);
请参阅regex101.com上的an example。