03月07, 2012

利用json2html打造自己的富文本过滤器

前几篇文章讲到如果利用html2json和json2html进行富文本内容的传输和安全过滤,对于json2html的富文本过滤,虽然默认的白名单进行了一些配置,但跟具体的某个产品的过滤规则还是有差异的,本文通过一个具体的实例来说明如何打造当前产品线要求的富文本过滤装置。

比如现在我们要对博客的内容进行过滤,可能我们会写一个blogEditor这样的类,这个类是如下的代码:

require_once '../src/json2html.class.php';
/**
 * blogEditor class
 * @author welefen <welefen@gmail.com>
 * @version 1.0
 * @license MIT
 */
class blogEditor extends json2html{
 /**
 * [init description]
 * @return [null]
 */
 public function init(){
 //add html5 tag blank list
 $this->addTagBlank(array('article', 'section', 'nav', 'header'));
 //add user define attr for div tag
 $this->addAttrBlank(array('data-vote', 'date-video'), 'div');
 }
 /**
 * [_filterClassAttrValue]
 * @param string $value [attr value]
 * @param string $tag [tag name]
 * @return [string]
 */
 public function _filterClassAttrValue($value = '', $tag = ''){
 $clsPattern = "/^[\w\s]+$/ies";
 if(preg_match($clsPattern, $value)){
 return $value;
 }
 return '';
 }
 /**
 * [_filterTargetAttrValue]
 * @param string $value [attr value]
 * @param string $tag [tag name]
 * @return [string]
 */
 public function _filterTargetAttrValue($value = '', $tag = ''){
 $targetValues = array("_blank", "_self", "_parent", "_top", /*"framename"*/);
 $value = strtolower($value);
 if(in_array($value, $targetValues)){
 return $value;
 }
 return '';
 }
}

在这个我们自己的过滤class里,我们通过init方法增加了下面的一些功能:

1、追加了一些tag白名单,加上header,article,section这些html5白名单。

2、给div标签增加了一些自定义属性

3、增加了对class和target这2个属性值的校验和过滤。

打造完我们自己的过滤类后,我们通过下面的方式进行使用:

require_once 'blogEditor.class.php';
$instance = new blogEditor($jsonContent);
$result = $instance->run();

本文链接:http://welefen.com/post/user-define-rich-content-filter-class.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。