php整理html 自定义允许使用的标签和属性属性

来源:互联网 发布:2015淘宝交易额 编辑:程序博客网 时间:2024/06/05 17:28

发布文章帖子等一般都是会页面html做过滤、转ubb码等,但是在多层复杂嵌套的时候会遇到很多问题,如果你不想用户使用html完全可以使用strip_tags过滤,如果需要使用html会用一些手段如正则匹配很复杂或者使用一些框架这些做法很消耗资源,有什么办法有效的限制用户的html代码,这里介绍一个php的扩展 tidy这个扩展专门做html处理,我这里写了个简单的html自定义过滤,你可以对一些复杂的html数据进行有效的数据。功能只有过滤有兴趣的朋友也可以扩展。

<?php/** * HTML整理 * 自定义HTML允许使用的标签和属性 * 变量$allow_tag说明 * 键为标签名 值是允许使用的属性 *代表全部运行 如果不允许使用属性配置NULL或者空 * 需要支持更多html标签$allow_tag设置 * 需要统一支持某个属性$allow_public_attribute配置 * 此功能需要服务器支持tidy模块 * tidyHtml::filter($html) 成功返回处理后的数据 如果不支持或者失败返回原数据 *  * @author weishanli <myweishanli@gmail.com> */class tidyHtml {/** * 需要处理的HTML *  * @var array */static public $tree_html = '';/** * 单标签HTML *  * @var array */static public $single_tag = array('img');/** * 公共允许使用的的属性 * @var array */static public $allow_public_attribute = array('align');/** * 允许使用的标签 *  * @var array */static public $allow_tag = array('a' => array('href'),'b' => '','i' => '','u' => '','p' => '','ol' => '','li' => '','ul' => '','br' => '','img' => array('src'),'div' => array('align'),'font' => array('size', 'color'),'span' => array('style'));/** * 过滤HTML *  * @param string $html html * @return string */static public function filter($html) {// 服务器需要支持tidyif ( ! function_exists('tidy_parse_string')) {return $html;} else {$tree_html = tidy_parse_string($html, array(), 'UTF8');self::$tree_html = $tree_html->body()->child;}self::$tree_html = self::tidy(self::$tree_html);return self::$tree_html;}static public function tidy($data) {$new_data = '';if ($data) {foreach($data as $r) {if ($r->name) { // 标签名if (isset(self::$allow_tag[$r->name])) { // 是否允许使用的标签 $new_data .= '<'.$r->name;if ($r->attribute && self::$allow_tag[$r->name] != 'none') {foreach ($r->attribute as $key => $value) { // 属性if (self::$allow_tag[$r->name] == '*') {$new_data .= ' '.$key.'="'.$value.'"';} elseif ((is_array(self::$allow_tag[$r->name]) && in_array($key, self::$allow_tag[$r->name])) || in_array($key, self::$allow_public_attribute)) { // 允许使用的属性$new_data .= ' '.$key.'="'.$value.'"';}}}if (in_array($r->name, self::$single_tag)) { // 单标签$new_data .= ' /';}$new_data .= '>';}} else { // 标签内的值$new_data .= trim($r->value);}if ($r->child) {$new_data .= self::tidy($r->child);}if ($r->name && isset(self::$allow_tag[$r->name])) {if (in_array($r->name, self::$single_tag) === FALSE) { // 不是单标签$new_data .= '</'.$r->name.'>';}}} }return $new_data;}}$html = file_get_contents('data.php');echo tidyHtml::filter($html);


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 腾达宽带用户名密码忘了怎么办 无线网秘密忘了怎么办 wan口设置已断开怎么办 中兴手机忘记解锁图案怎么办 u盘显示参数错误怎么办 硬盘vc加密密码忘了怎么办 软件文件移动到其他盘打不开怎么办 u盘无法复制文件怎么办 u盘大文件不能拷怎么办 abc看图打印不了怎么办 百度云大文件慢怎么办 手机视频缩略图加载失败怎么办 电脑突然卡住不动了怎么办 word文档被锁住了怎么办 手机qq磁盘已满怎么办 不小心格式化了硬盘怎么办 移动硬盘插上显示要格式化怎么办 微信网络特别慢怎么办 苹果六网速太慢怎么办 小米手机wifi网速慢怎么办 苹果8蜂窝上网慢怎么办 苹果6s4g网速慢怎么办 苹果7上网速度慢怎么办 银行转账到别人账户怎么办 银行转账转错账户怎么办 人已故欠的公款怎么办 论文抄了表格数据怎么办 电子转账转错了怎么办 苹果手机付款方式有问题怎么办 合同中付款方式错怎么办? 优步付款方式无效怎么办 工程付款方式变更没有合同怎么办 银行账号被锁了怎么办? 街电押金退不了怎么办 佣金宝账号忘了怎么办 如果汇款汇错了怎么办 手机汇款汇错了怎么办 汇款时少了数字怎么办 打过流脑后发烧怎么办 甲醛公司除完后怎么办 发票系统导出的xml 怎么办