Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从HTML标记中剥离样式属性?_Php_Html_Strip Tags - Fatal编程技术网

Php 如何从HTML标记中剥离样式属性?

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

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

[一些标题]一些文字。。。
你好

",;
有什么想法吗

  • 你不能修改输出吗?样式标签不包括在内(内联样式是一种糟糕的做法)

  • 是否可以包含您自己的CSS并使用
    覆盖主体属性!重要信息
    修改输出的规则

  • 如果两个问题都回答为“否”,则使用正则表达式或DOM/XML解析器将其删除

  • 你不能修改输出吗?样式标签不包括在内(内联样式是一种糟糕的做法)

  • 是否可以包含您自己的CSS并使用
    覆盖主体属性!重要信息
    修改输出的规则

  • 如果两个问题都回答为“否”,则使用正则表达式或DOM/XML解析器将其删除


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

    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____________________________。