PHP HTML strip_tags 除部分内容外全部删除标签内的样式
PHP HTML strip_tags all except some and remove styling from within tag
HTML 看起来像这样:
$html = 'SOME TEXT<p style="border-top: 0.0px;border-right: 0.0px;vertical-align: baseline;border-bottom: 0.0px;color: #000000;padding-bottom: 0.0px;padding-top: 0.0px;padding-left: 0.0px;margin: 0.0px;border-left: 0.0px;padding-right: 0.0px;background-color: #ffffff;">SOME TEXT';
我尝试 strip_tags($html, '<p>');
删除除 <p>
之外的所有内容,但这保留了标签的所有样式元素。
我希望将上面的替换为 <p>
最好的方法是什么?
谢谢!
最简单的解决方案是基于 preg_replace()
。
$html = 'SOME TEXT<p style="border-top: 0.0px;border-right: 0.0px;vertical-align: baseline;border-bottom: 0.0px;color: #000000;padding-bottom: 0.0px;padding-top: 0.0px;padding-left: 0.0px;margin: 0.0px;border-left: 0.0px;padding-right: 0.0px;background-color: #ffffff;">SOME TEXT';
$html = strip_tags($html, '<p>');
$html = preg_replace('/\sstyle=["\'][A-Za-z0-9-:\s.;#]{1,}["\']/', '', $html);
一如既往,您在尝试使用正则表达式解析 html 时应始终小心谨慎。例如,如果由于某种原因 <p />
标签内的文本包含格式类似于 css 样式的内容,这将失败。 (类似于 <p>If I typed style="color:red" inside the tags, it would also be removed</p>
)
为了使这样的事情变得更好,下一步是使用 DOMDocument class 将字符串实际解析为 XML 文档。这取决于您希望实现的功能集有多强大。但是,此方法可能会以意想不到的方式更改您的字符串;例如,将您的字符串解析为 DOMDocument 会导致添加 </p>
标记。这种验证可能对您有用,也可能没有用。
还有一些非常有用的时候会删除如下样式标签
`$html = '<style>li {
list-style: none;
background: url(/images/Articles/ordasoft_discount.png) no-repeat;
padding-left: 30px;
}
li p{font-size:16px}
ul li {
padding-left: 30px;}
.portfolio-container{width: 45%;}
</style> Hello word ';`
这会有所帮助:
`$html = preg_replace('/<style>[A-Za-z0-9-:\s.\/_;#\(\)\{\}%]{1,}<\/style>/', '',$html) ;`
HTML 看起来像这样:
$html = 'SOME TEXT<p style="border-top: 0.0px;border-right: 0.0px;vertical-align: baseline;border-bottom: 0.0px;color: #000000;padding-bottom: 0.0px;padding-top: 0.0px;padding-left: 0.0px;margin: 0.0px;border-left: 0.0px;padding-right: 0.0px;background-color: #ffffff;">SOME TEXT';
我尝试 strip_tags($html, '<p>');
删除除 <p>
之外的所有内容,但这保留了标签的所有样式元素。
我希望将上面的替换为 <p>
最好的方法是什么?
谢谢!
最简单的解决方案是基于 preg_replace()
。
$html = 'SOME TEXT<p style="border-top: 0.0px;border-right: 0.0px;vertical-align: baseline;border-bottom: 0.0px;color: #000000;padding-bottom: 0.0px;padding-top: 0.0px;padding-left: 0.0px;margin: 0.0px;border-left: 0.0px;padding-right: 0.0px;background-color: #ffffff;">SOME TEXT';
$html = strip_tags($html, '<p>');
$html = preg_replace('/\sstyle=["\'][A-Za-z0-9-:\s.;#]{1,}["\']/', '', $html);
一如既往,您在尝试使用正则表达式解析 html 时应始终小心谨慎。例如,如果由于某种原因 <p />
标签内的文本包含格式类似于 css 样式的内容,这将失败。 (类似于 <p>If I typed style="color:red" inside the tags, it would also be removed</p>
)
为了使这样的事情变得更好,下一步是使用 DOMDocument class 将字符串实际解析为 XML 文档。这取决于您希望实现的功能集有多强大。但是,此方法可能会以意想不到的方式更改您的字符串;例如,将您的字符串解析为 DOMDocument 会导致添加 </p>
标记。这种验证可能对您有用,也可能没有用。
还有一些非常有用的时候会删除如下样式标签
`$html = '<style>li {
list-style: none;
background: url(/images/Articles/ordasoft_discount.png) no-repeat;
padding-left: 30px;
}
li p{font-size:16px}
ul li {
padding-left: 30px;}
.portfolio-container{width: 45%;}
</style> Hello word ';`
这会有所帮助:
`$html = preg_replace('/<style>[A-Za-z0-9-:\s.\/_;#\(\)\{\}%]{1,}<\/style>/', '',$html) ;`