如何从HTML标签中删除样式属性?

时间:2011-10-12 12:43:35

标签: php html strip-tags

我想用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>';

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

非常简单的替换可能会:

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

希望这有帮助

答案 1 :(得分:2)

如果您无法阻止首先插入style属性,我建议使用HTML Purifier之类的内容。对于这种问题,它是一个完善的解决方案,并且允许您在将来执行更多的HTML过滤(例如,XSS预防)。

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

答案 2 :(得分:0)

  1. 你不能修改输出,不包括样式标签(内联样式是不好的做法)?

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

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

相关问题