Php 如何从HTML标记中剥离样式属性?
我想用PHP删除标签中的所有样式 比如说 原件:Php 如何从HTML标记中剥离样式属性?,php,html,strip-tags,Php,Html,Strip Tags,我想用PHP删除标签中的所有样式 比如说 原件: 最终: 下面是一个例子: $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
最终:
下面是一个例子:
$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>';
$body\u htm='1
[一些标题]一些文字。。。
你好 ",;
它应返回以下内容:
<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>';
[一些标题]一些文字。。。
你好 ",;
有什么想法吗
覆盖主体属性!重要信息
修改输出的规则覆盖主体属性!重要信息
修改输出的规则一个非常简单的替换可能会:
preg_replace( '/style=(["\'])[^\1]*?\1/i', '', $subject, -1 );
希望这有帮助一个非常简单的替换可能会:
preg_replace( '/style=(["\'])[^\1]*?\1/i', '', $subject, -1 );
希望这对您有所帮助如果您无法首先阻止插入
样式
属性,我建议您执行类似的操作。它是一个针对此类问题的完善解决方案,并且允许您在将来以最小的工作量执行更多的HTML过滤(例如XSS预防)
问题可以通过使用正则表达式解决方案来解决,通常需要越来越复杂的正则表达式来纠正,直到您自己基本上重新创建了类似HTML净化器的东西(并且在这个过程中失去了理智)。如果您收到无效的标记,使用扩展也会产生问题。虽然HTML净化器在各方面可能都不完美,但它可以满足您的需要并得到支持。如果您无法阻止首先插入
样式
属性,我建议使用类似的方法。它是一个针对此类问题的完善解决方案,并且允许您在将来以最小的工作量执行更多的HTML过滤(例如XSS预防)
问题可以通过使用正则表达式解决方案来解决,通常需要越来越复杂的正则表达式来纠正,直到您自己基本上重新创建了类似HTML净化器的东西(并且在这个过程中失去了理智)。如果您收到无效的标记,使用扩展也会产生问题。虽然HTML净化器在各方面可能都不完美,但它可以满足您的需要并得到支持。此线程的可能重复:纯粹主义者指出的线程没有选择的答案!!!这个线程的可能重复:纯粹主义者指出的线程没有选择的答案!!!这是事实,但并非适用于所有情况。例如,Gmail尚未读取HTML文档头部的样式。请参阅:使用
!重要信息
,更不用说依靠它来防止布局破坏了,这是一种糟糕的做法,会让任何设计师或前端开发人员想对你做坏事。两错不等于一对(用!important
)抵消样式属性)。这是事实,但并非适用于所有场景。例如,Gmail尚未读取HTML文档头部的样式。请参阅:使用!重要信息
,更不用说依靠它来防止布局破坏了,这是一种糟糕的做法,会让任何设计师或前端开发人员想对你做坏事。两个错误永远不能成为正确(用!important
)抵消样式属性)。这样做可以,但产生的标记以空格结尾,请参见:
我在/style
前面插入了一个空格,它成功了。啊,太酷了。如果属性看起来像style=“color:#fff”,我想它也不会那么完整。当属性和值之间有空格时,这真的很有帮助,谢谢!我见过的其他(更复杂的)解决方案以某种方式使标记处于打开状态,从而完全破坏了布局的其余部分。如果我想剥离“style”属性的所有属性和值,并将其替换为其他属性,例如“class”属性,该怎么办?现在您正在删除style属性,但我需要删除它的所有内容,并用class属性替换它。我该怎么做呢?这样就可以了,但是生成的标记以空格结尾,请参见:
我在/style
前面插入了一个空格,它成功了。啊,太酷了。如果属性看起来像style=“color:#fff”,我想它也不会那么完整。当属性和值之间有空格时,这真的很有帮助,谢谢!我见过的其他(更复杂的)解决方案以某种方式使标记处于打开状态,从而完全破坏了布局的其余部分。如果我想剥离“style”属性的所有属性和值,并将其替换为其他属性,例如“class”属性,该怎么办?现在您正在删除style属性,但我需要删除它的所有内容,并用class属性替换它。我该怎么做呢?谢谢你的“HTML净化器”提示!但是对于我的实际需要,一个简单的preg_替换就可以了。谢谢你的“HTML净化器”提示!但出于我的实际需要,一个简单的preg____________________________。