我有一个类似于这样的字符串(它是一个空段落),保存在我从TinyMCE输入进行重编辑和后处理后的内容中。
在浏览器的HTML源代码中echo出来的样子如下:
<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和这个线程链接,我找到了这个字符。 它是unicode值中的nbsp。请参见http://unicodelookup.com/#160/1
这样做有效:
$output = preg_replace("/<p>[\x{00A0}\s]*<\/p>/u", "", $string);
正如mcrumley所指出的,这种方法可能会更好:
"/<p>[\p{Zs}\s]*<\/p>/iu"
<p>[^<]*<\/p>
怎么样?无论如何,检查页面源代码以确保...我记得上次类似的情况让我发疯:S - Enissay[\x{00a0}|\s]
匹配非断行空格、空格和管道符"|". 你可以去掉"|"。 - mcrumley