1

我想用 PHP 从标签中删除所有样式。

例如。

原来的:

<body style="color:back;">

最终的:

<body>

这是一个例子:

$body_htm='<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>[Some Title] some text...</title>
</head>
<body style="background-color: #F2F2F2; color: #222; font-family: georgia,serif; letter-spacing: -0.01em; line-height: 1.25; margin-bottom: 0.55em; font-size: 1.2em;">
<div style="background-color: #F2F2F2; border: 2px dotted #333; padding: 55px 0 55px 55px;">
<div style="background-color: #F2F2F2; width: 400px;">
<p style="margin-bottom:110px;"><b>Hello!!!</b></p>';

它应该返回这个:

<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>[Some Title] some text...</title>
</head>
<body>
<div>
<div>
<p><b>Hello!!!</b></p>';

有任何想法吗?

4

3 回答 3

5

一个非常简单的替换可能会:

preg_replace( '/style=(["\'])[^\1]*?\1/i', '', $subject, -1 );

希望这可以帮助

于 2011-10-12T13:00:10.620 回答
2

如果您一开始就无法阻止style属性的插入,我建议您使用HTML Purifier之类的东西。对于此类问题,它是一个完善的解决方案,并且还允许您在未来以最小的努力执行更多的 HTML 过滤(例如 XSS 预防)。

问题可以通过使用正则表达式解决方案来创建,通常需要越来越复杂的正则表达式来纠正,直到您自己基本上重新创建了 HTML Purifier 之类的东西(并且在此过程中失去了理智)。如果您收到无效标记,使用DOM扩展也会产生问题。虽然 HTML Purifier 可能在各个方面都不是完美的,但它会满足您的需求并受到支持。

于 2011-10-12T13:20:29.640 回答
0
  1. 你不能修改输出,不包括样式标签(内联样式无论如何都是不好的做法)?

  2. 是否可以包含您自己的 CSS 并使用!important规则覆盖正文属性以修改您的输出?

  3. 如果用“否”回答这两个问题,则使用正则表达式或 DOM/XML-Parser 将其删除。

于 2011-10-12T12:52:37.860 回答