使用 PHP 从文本中删除内联 CSS 和类

Posted

技术标签:

【中文标题】使用 PHP 从文本中删除内联 CSS 和类【英文标题】:Remove inline CSS and classes from text with PHP 【发布时间】:2011-06-18 09:48:49 【问题描述】:

我有一个这样的文本:

aaaa bbbbb cccccc a:link text-decoration: none;font-family: Verdana, Arial, Helvetica, sans-serif;color: #ffffff; a:hover 文本装饰:下划线; .intro字体大小:11px;字体粗细:粗体;行高:18px;颜色:#ffffff;padding-left:25px;字体系列:Verdana、Arial、Helvetica、sans-serif; ddddd eeeeee

我想删除所有带有类的 css。输出应该是:

aaaa bbbbb cccccc ddddd eeeeee

可以给我看一个 preg_match 的例子吗?我喜欢删除括号 之间的所有内容的示例,但我需要删除所有带有 css 的内容。

谢谢 尼克

【问题讨论】:

为什么不根据您的情况使用 preg_replace? 接受答案并向我们展示您已有的正则表达式。你只给了我们一半的答案 去掉括号内的CSS后去掉括号? 【参考方案1】:

从该字符串中删除非 CSS 部分的麻烦在于,很难确定哪些部分是 CSS,哪些不是。

您说您想留下aaaa bbbbb cccccc ddddd eeeeee,但实际上从您的原始字符串中,aaaa bbbbb cccccc 将是 CSS 选择器的有效部分。他们会选择名为 <aaaa><bbbbb><cccccc> 的元素。

当然,这些不是有效的 html 元素,但 CSS 可用于将样式应用于任意 XML 和 HTML,因此它们很容易成为有效元素。如果您使用的是 xhtml,它们可能会在您的页面中以自定义名称空间合法地出现。

但情况会变得更糟。我假设文本实际上不是aaaa bbbbb cccccc,而是任意字符串。在这种情况下,考虑它可能是一个像“我很坚强”这样的句子。在这种情况下,strong 将是您要删除的字符串的一部分,但 <strong> 也是一个有效的 HTML 元素(与 <I> 一样),所以即使您只是坚持使用它也会是无法在上面的字符串中判断它是打算作为 CSS 选择器还是要保留的文本字符串的一部分。您根本无法编写在所有情况下都完全可靠的正则表达式。

正如您所说,您可以相当轻松地删除 大括号内的所有内容,但大括号外的选择器很难与周围的文本可靠地分开。

【讨论】:

以上是关于使用 PHP 从文本中删除内联 CSS 和类的主要内容,如果未能解决你的问题,请参考以下文章

您如何内联记录您的 PHP 函数和类? [关闭]

PHP Wordpress - 从默认库中删除内联样式

Magento 2从数据库中删除内联转换

SVG:为啥外部 css 会覆盖文本的内联样式?

php类内联css样式?

如何在 HTML 中的内联 CSS 中使用 PHP 代码