php - 如何替换整个字符串,包括 html 标签?

标签 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>

基本上我想做的就是删除所有 &nbsp;还有所有<p>&nbsp;</p> ,我知道使用正则表达式来过滤 HTML 是一个坏主意,但就我而言,场景仅限于我上面提到的 2 个选项。

所以我有以下 PHP 代码:

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

但现在不再删除 <p>&nbsp;</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>/g', '', $request->blog_content );

为了坚持原来的策略,您需要颠倒数组中的顺序,从最具体到最不具体:

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

这样,它就会替换 <p> 中包含的版本首先标记,然后是 &nbsp;没有<p>标签等

关于php - 如何替换整个字符串,包括 html 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41576532/

相关文章:

php - 将 MySQL 查询中的多个列值存储到 PHP 数组中

php - 在 WooCommerce 管理订单页面上将产品自定义字段显示为订单项元

javascript - Jquery 不返回数据 IE

java HTML正则表达式问题

java - 使用Java中的正则表达式将字符串拆分为两个以冒号分隔的字符串,并忽略标签和引号内的冒号

php - 错误 1005 (HY000) : Can't create table 'db.POSTS' (errno: 150)

php - 允许脚本读取文件但阻止用户直接查看文件

python - 从html文件中导入表的行作为python中的列表

c - strtok 不会接受 : char *str

Python 删除非拉丁字符