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);
- php整理html 自定义允许使用的标签和属性属性
- 自定义HTML标签属性
- HTML 标签自定义属性
- HTML标签自定义属性
- html自定义标签属性
- 自定义HTML标签属性
- HTML标签自定义属性
- HTML标签自定义属性
- HTML标签自定义属性
- HTML标签自定义属性
- HTML标签自定义属性
- 自定义HTML标签属性
- HTML标签自定义属性
- HTML的meta标签常用属性整理
- 自定义html标签和表单属性
- html标签自定义属性的应用
- html的input 标签自定义属性
- html标签自定义属性的问题
- Linux源码包安装
- HDU 4661 Message Passing
- netstat Recv-Q和Send-Q
- 53个要点提高PHP编程效率
- LA 4670 Dominating Patterns (AC自动机)
- php整理html 自定义允许使用的标签和属性属性
- 岗位要求:高级PHP开发工程师
- C# WinForm中AppDomain.CurrentDomain.BaseDirectory与Application.StartupPath
- 如何做个优秀销售员
- 配置Exhcange 2007、Exchange 2010收发外网邮件
- python 判断字符串方法
- SWING项目中窗体之间的数据联动的实现
- JAVA-设计模式之单例模式
- hdu 3586 树形DP+二分法