我想用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>';
有什么想法吗?
答案 0 :(得分:6)
非常简单的替换可能会:
preg_replace( '/style=(["\'])[^\1]*?\1/i', '', $subject, -1 );
希望这有帮助
答案 1 :(得分:2)
如果您无法阻止首先插入style
属性,我建议使用HTML Purifier之类的内容。对于这种问题,它是一个完善的解决方案,并且允许您在将来执行更多的HTML过滤(例如,XSS预防)。
可以通过使用正则表达式解决方案来创建问题,通常需要越来越复杂的正则表达式来纠正,直到您自己重新创建类似HTML Purifier的东西(并在此过程中失去理智)。如果您使用无效标记,使用DOM扩展名也会产生问题。尽管HTML Purifier在各方面都可能并不完美,但它可以满足您的需求并得到支持。
答案 2 :(得分:0)
你不能修改输出,不包括样式标签(内联样式是不好的做法)?
是否可以包含您自己的CSS并使用!important
规则覆盖正文属性以修改您的输出?
如果使用“否”回答了这两个问题,请使用正则表达式或DOM / XML-Parser将其删除。