zoukankan      html  css  js  c++  java
  • PHP实例——输出安全的HTML代码

    //输出安全的html
    function h($text, $tags = null){

    $text = trim($text);
    //完全过滤注释
    $text = preg_replace('/<!--?.*-->/','',$text);

    //完全过滤动态代码
    $text = preg_replace('/<\?|\?'.'>/','',$text);

    //完全过滤js
    $text = preg_replace('/<script?.*\/script>/','',$text);


    $text = str_replace('[','&#091;',$text);
    $text = str_replace(']','&#093;',$text);
    $text = str_replace('|','&#124;',$text);
    //过滤换行符
    $text = preg_replace('/\r?\n/','',$text);

    //br
    $text = preg_replace('/<br(\s\/)?'.'>/i','[br]',$text);

    $text = preg_replace('/(\[br\]\s*){10,}/i','[br]',$text);
    //过滤危险的属性,如:过滤on事件lang js
    while(preg_match('/(<[^><]+)( lang|on|action|background|codebase|dynsrc|lowsrc)[^><]+/i',$text,$mat)){

    $text=str_replace($mat[0],$mat[1],$text);
    }
    while(preg_match('/(<[^><]+)(window\.|javascript:|js:|about:|file:|document\.|vbs:|cookie)([^><]*)/i',$text,$mat)){
    $text=str_replace($mat[0],$mat[1].$mat[3],$text);
    }
    if(empty($tags)) {
    $tags = 'table|td|th|tr|i|b|u|strong|img|p|br|div|strong|em|ul|ol|li|dl|dd|dt|a';
    }
    //允许的HTML标签
    $text = preg_replace('/<('.$tags.')( [^><\[\]]*)>/i','[\1\2]',$text);

    //过滤多余html
    $text = preg_replace('/<\/?(html|head|meta|link|base|basefont|body|bgsound|title|style|script|form|iframe|frame|frameset|applet|id|ilayer|layer|name|script|style|xml)[^><]*>/i','',$text);

    //过滤合法的html标签
    while(preg_match('/<([a-z]+)[^><\[\]]*>[^><]*<\/\1>/i',$text,$mat)){

    $text=str_replace($mat[0],str_replace('>',']',str_replace('<','[',$mat[0])),$text);
    }
    //转换引号
    while(preg_match('/(\[[^\[\]]*=\s*)(\"|\')([^\2=\[\]]+)\2([^\[\]]*\])/i',$text,$mat)){

    $text=str_replace($mat[0],$mat[1].'|'.$mat[3].'|'.$mat[4],$text);
    }
    //过滤错误的单个引号
    while(preg_match('/\[[^\[\]]*(\"|\')[^\[\]]*\]/i',$text,$mat)){

    $text=str_replace($mat[0],str_replace($mat[1],'',$mat[0]),$text);
    }
    //转换其它所有不合法的 < >
    $text = str_replace('<','&lt;',$text);

    $text = str_replace('>','&gt;',$text);
    $text = str_replace('"','&quot;',$text);
    //反转换
    $text = str_replace('[','<',$text);

    $text = str_replace(']','>',$text);
    $text = str_replace('|','"',$text);
    //过滤多余空格
    $text = str_replace(' ',' ',$text);

    return $text;
    }
  • 相关阅读:
    Atitti. 语法树AST、后缀表达式、DAG、三地址代码
    Atitit.antlr实现词法分析
    Atitit.antlr实现词法分析
    Atitit.词法分析的理论原理 part2
    Atitit.词法分析的理论原理 part2
    atitit.词法分析原理 词法分析器 (Lexer)
    atitit.词法分析原理 词法分析器 (Lexer)
    Atitti.数据操作crud js sdk dataServiceV3设计说明
    Atitti.数据操作crud js sdk dataServiceV3设计说明
    Atitit.http代理的实现 代码java php c# python
  • 原文地址:https://www.cnblogs.com/picaso/p/2408877.html
Copyright © 2011-2022 走看看