Php 如何替换包括html标记在内的整个字符串?

Php 如何替换包括html标记在内的整个字符串?,php,html,string,Php,Html,String,我从laravel中的文本框中获取以下HTML: <p>Just a test</p> <p>&nbsp;</p> <p>Just a test</p> <p>&nbsp;</p> <p>Just a test</p> 但是现在,在完全删除之后,我得到了以下输出 <p>Just a test</p> <p> ;</p&

我从laravel中的文本框中获取以下HTML:

<p>Just a test</p>
<p>&nbsp;</p>
<p>Just a test</p>
<p>&nbsp;</p>
<p>Just a test</p>
但是现在,在完全删除

之后,我得到了以下输出

<p>Just a test</p>
<p> ;</p>
<p>Just a test</p>
<p> ;</p>
<p>Just a test</p>
只是一个测试

)

只是个测试

)

只是个测试


如何替换描述中的HTML???

您可以使用正则表达式获得仅包含不间断空格的段落,并使用以下简单正则表达式获得紧跟其后的换行符:

$blog_content = preg_replace('/<p>&nbsp;<\/p>\s*/', '', $request->blog_content);
$blog\u content=preg\u replace('/\s*/',''$request->blog\u content);

在这种情况下,正则表达式没有什么问题:

$blog_content = preg_replace( '/<p>(&nbsp;)?<\/p>/g', '', $request->blog_content );
$blog\u content=preg\u replace('/()?/g',''$request->blog\u content);
要坚持原来的策略,您需要将数组中的顺序从最特定顺序颠倒为最不特定顺序:

$replaceNbsp = array( '<p>&nbsp;</p>', '&nbsp;' , '&nbsp' );
$blog_content = str_replace($replaceNbsp , ' ' , $request->blog_content);
$replacebsp=array(“

”,“,”); $blog\u content=str\u replace($replaceBsp,,$request->blog\u content);

这样,它会先替换用
标记包装的版本,然后替换没有
标记的
,等等。

您可以这样尝试吗:

$replaceNbsp = array( '<p>&nbsp;</p>', '&nbsp;', '&nbsp' );
$blog_content = str_replace($replaceNbsp , ' ' , $request->blog_content);
return $blog_content;
$replacebsp=array(“

”,“,”); $blog\u content=str\u replace($replaceBsp,,$request->blog\u content); 返回$blog_内容;
首先,您没有使用正则表达式。第二,regex有什么问题?它取代了您提供的订单;反转它尝试反转$replaceBsp中这些元素的顺序--先移除大元素,然后移除小元素。@nogad谢谢你的工作!!:)@aimme您当然有权发表您的意见,但我已经比较了这两篇文章,这就是促使我之前发表评论的原因。@cale_b您是对的,尽管我怀疑OP并不是真的想删除所有NBSP。它们有时确实很有用。
$replaceNbsp = array( '<p>&nbsp;</p>', '&nbsp;', '&nbsp' );
$blog_content = str_replace($replaceNbsp , ' ' , $request->blog_content);
return $blog_content;