用PHP中的htmlspecialchars()替换除某些html标签外的所有HTML标签?

用户名

我想处理我的用户输入,以仅允许某些html标记,并用其html实体替换其他标记,以及替换非标记字符。例如,如果我只想允许<b><a>标签,那么

allow_only("This is <b>bold</b> and this is <i>italic</i>.
            Moreover 2<3 and <a href='google.com'>this is a link</a>.","<b><a>");

应该产生

This is <b>bold</b> and this is &lt;i&gt;italic&lt;/i&gt;.
Moreover 2&lt;3 and <a href='google.com'>this is a link</a>.

如何在PHP中做到这一点?我知道strip_tags()这可以完全删除不需要的标签,并且我知道htmlspecialchars()可以用html实体替换所有标签,但是不能替换仅特定标签的标签。如何在PHP中完成?

并且,如果没有“通用”方法来执行此操作,那么一般而言,我应该如何继续处理可能具有有效常规html但也可能带有<标志和潜在危险html代码的用户输入

用户名

应用htmlspecialchars,然后将给定标签数组的编码实体替换为常规实体

function allow_only($str, $allowed){
    $str = htmlspecialchars($str);
    foreach( $allowed as $a ){
        $str = str_replace("&lt;".$a."&gt;", "<".$a.">", $str);
        $str = str_replace("&lt;/".$a."&gt;", "</".$a.">", $str);
    }
    return $str;
}
echo allow_only("This is <b>bold</b> and this is <i>italic</i>.", array("b"));

这适用于简单的标签,返回“这是粗体字,是<i>斜体字</ i>”。

如前所述,这不适用于带有属性的标签,但是可以:

function fix_attributes($match){
    return "<".$match[1].str_replace('&quot;','"',$match[2]).">";
}
function allow_only($str, $allowed){
    $str = htmlspecialchars($str);
    foreach( $allowed as $a ){
        $str = preg_replace_callback("/&lt;(".$a."){1}([\s\/\.\w=&;:#]*?)&gt;/", fix_attributes, $str);
        $str = str_replace("&lt;/".$a."&gt;", "</".$a.">", $str);
    }
    return $str;
}
echo allow_only('This is <b>bold</b> and <a href="http://www.#links">this</a> is <i>italic</i>.', array("b","a"));

可以处理具有某些属性的更复杂的标记,因此,仅[]允许它们之间列出的字符出现在属性中。不幸的是&quot;必须在属性中允许它使用,否则它将不起作用,并且也允许所有其他实体使用-但是仅&quot在属性中将被解码。

如所建议的,使用http://htmlpurifier.org/demo.php之类的库来解决这种问题的更好(更安全,更干净)的方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery替换div中除标签外的所有内容

来自分类Dev

替换所有不在html标签中的引号

来自分类Dev

替换HTML字符串中的所有<a>标签

来自分类Dev

替换所有不在html标签中的引号

来自分类Dev

除某些标记外,是否有PHP函数可以对所有内容进行htmlspecialchars()?

来自分类Dev

用php自动替换标签HTML

来自分类Dev

禁用或替换某些 HTML 标签

来自分类Dev

PHP htmlspecialchars()函数在页面中显示html安全标签

来自分类Dev

使用 ES6 Javascript 删除页面中除 <a> 标签之外的所有 html 标签?

来自分类Dev

替换HTML中的标签

来自分类Dev

清除除某些控件外的所有html控件

来自分类Dev

用空格替换html标签

来自分类Dev

如何在notepad ++中删除除html标签和此HTML标签内容之外的所有内容?

来自分类Dev

禁止除<img>之外的所有html标签

来自分类Dev

用PHP替换所有HTML标记

来自分类Dev

用PHP解析HTML不会删除所有html标签吗?

来自分类Dev

删除html字符串中除<a>之外的所有标签

来自分类Dev

如何从字符串中去除除反引号中包含的标签之外的所有HTML标签?

来自分类Dev

如何使用Vanilla JavaScript搜索和替换HTML文件中的所有标签?

来自分类Dev

Python:搜索和替换 HTML 字符串中的所有 img 标签

来自分类Dev

用XML字符串中的null替换html标签

来自分类Dev

bash脚本用其内容替换html中的脚本标签

来自分类Dev

用 C# 替换任何 <p> 标签 html 中的文本

来自分类Dev

使用 XSLT 函数删除除允许标签之外的所有 html 标签

来自分类Dev

用Grunt-Replace替换HTML标签

来自分类Dev

用javascript在新标签页中打开所有html链接?

来自分类Dev

php在文件html中的两个标签之间替换

来自分类Dev

PHP 替换 HTML 表格标签内的数据

来自分类Dev

在HTML文档中获取某些p标签

Related 相关文章

  1. 1

    jQuery替换div中除标签外的所有内容

  2. 2

    替换所有不在html标签中的引号

  3. 3

    替换HTML字符串中的所有<a>标签

  4. 4

    替换所有不在html标签中的引号

  5. 5

    除某些标记外,是否有PHP函数可以对所有内容进行htmlspecialchars()?

  6. 6

    用php自动替换标签HTML

  7. 7

    禁用或替换某些 HTML 标签

  8. 8

    PHP htmlspecialchars()函数在页面中显示html安全标签

  9. 9

    使用 ES6 Javascript 删除页面中除 <a> 标签之外的所有 html 标签?

  10. 10

    替换HTML中的标签

  11. 11

    清除除某些控件外的所有html控件

  12. 12

    用空格替换html标签

  13. 13

    如何在notepad ++中删除除html标签和此HTML标签内容之外的所有内容?

  14. 14

    禁止除<img>之外的所有html标签

  15. 15

    用PHP替换所有HTML标记

  16. 16

    用PHP解析HTML不会删除所有html标签吗?

  17. 17

    删除html字符串中除<a>之外的所有标签

  18. 18

    如何从字符串中去除除反引号中包含的标签之外的所有HTML标签?

  19. 19

    如何使用Vanilla JavaScript搜索和替换HTML文件中的所有标签?

  20. 20

    Python:搜索和替换 HTML 字符串中的所有 img 标签

  21. 21

    用XML字符串中的null替换html标签

  22. 22

    bash脚本用其内容替换html中的脚本标签

  23. 23

    用 C# 替换任何 <p> 标签 html 中的文本

  24. 24

    使用 XSLT 函数删除除允许标签之外的所有 html 标签

  25. 25

    用Grunt-Replace替换HTML标签

  26. 26

    用javascript在新标签页中打开所有html链接?

  27. 27

    php在文件html中的两个标签之间替换

  28. 28

    PHP 替换 HTML 表格标签内的数据

  29. 29

    在HTML文档中获取某些p标签

热门标签

归档