php过滤危险html函数代码

1、删除html注释;

2、删除script、link、object、embed、iframe、frame、frameset以及拥有on开头、包含网页特效:[^;]或expression的属性的标签;

3、删除css教程中的注释(防止用这个来欺骗删除expression表达式,不知道还有其他什么方法可以欺骗删除expression);

4、删除expression表达式;

php过滤危险html,代码如下:

  1. function fillter_html( $str ) {
  2. /* 过滤style标签 */
  3. return preg_replace_callback(
  4. /* 过滤style标签内容 */
  5. '/(<s*style[^>]*>)((?:(?!<s*/s*styles*>).)*)(<s*/s*styles*>)?/i',
  6. create_function('$str', 'return $str[1] . fillter_css($str[2]) . $str[3];'),//开源代码phpfensi.com
  7. preg_replace(
  8. array(
  9. /* 删除html注释 */
  10. '/<!--.*?-->/i',
  11. /* 删除标签:script、link、object、embed、iframe、frame、frameset */
  12. '/<s*(script|object|embed|link|i?frame(set)?)[^>]*>(.*?<s*/s*\1s*>)?/i',
  13. /* 删除事件、javascript协议、css表达式 */
  14. '/<[^>]+((on[a-z]+s*=|javascript:[^;"\']|expressions*()[^>]*)+>?/i',
  15. ),
  16. '',
  17. $str
  18. )
  19. );
  20. }
  21. /* 过滤样式正文 */
  22. function fillter_css( $str ) {
  23. /* 删除注释、javascript协议、表达式 */
  24. return preg_replace(array('/(/*((?!*/).)**/|/*|*/)/i', '/expressions*((.*?))?|javascripts*:/i',), '', $str);
  25. }