php安全过滤html代码输出方法
代码方法已经封装好,需要的拿去,如下:
/** * 函数用于过滤不安全的html标签,输出安全的html * @param string $text 待过滤的字符串 * @param string $type 保留的标签格式 link|image|font|base等 * @return string 处理后内容 */ function article_html($text, $type = 'html') { // 无标签格式 $text_tags = ''; //只保留链接 $link_tags = '<a>'; //只保留图片 $image_tags = '<img>'; //只存在字体样式 $font_tags = '<i><b><u><s><em><strong><font><big><small><sup><sub><bdo><h1><h2><h3><h4><h5><h6>'; //标题摘要基本格式 $base_tags = $font_tags . '<p><br><hr><a><img><map><area><pre><code><q><blockquote><acronym><cite><ins><del><center><strike>'; //兼容Form格式 $form_tags = $base_tags . '<form><input><textarea><button><select><optgroup><option><label><fieldset><legend>'; //内容等允许HTML的格式 $html_tags = $base_tags.$image_tags . '<ul><ol><li><dl><dd><dt><table><caption><td><th><tr><thead><tbody><tfoot><col><colgroup><div><span><object><embed><param>'; //专题等全HTML格式 $all_tags = $form_tags . $html_tags . '<!DOCTYPE><meta><html><head><title><body><base><basefont><script><noscript><applet><object><param><style><frame><frameset><noframes><iframe>'; //var_dump(${$type . '_tags'}); //exit; //过滤标签 $text = real_strip_tags($text, ${$type . '_tags'}); // 过滤攻击代码 if ($type != 'all') { // 过滤危险的属性,如:过滤on事件lang js while (preg_match('/(<[^><]+)(on|action|background[^-]|codebase|dynsrc|lowsrc)([^><]*)/i', $text, $mat)) { $text = str_ireplace($mat[0], $mat[1] . $mat[3], $text); } while (preg_match('/(<[^><]+)(window\.|javascript:|js:|about:|file:|document\.|vbs:|cookie)([^><]*)/i', $text, $mat)) { $text = str_ireplace($mat[0], $mat[1] . $mat[3], $text); } } return $text; } function real_strip_tags($str, $allowable_tags = "") { // $str = html_entity_decode($str, ENT_QUOTES, 'UTF-8'); return strip_tags($str, $allowable_tags); }