从数据库读取数据,有的数据直接放到前台显示。如果遇到一些具有可自行的文本标记。那么前台就会容易解析,导致页面布局混乱。为了防止这样的情况,需要对提出的数据进行转换。主要用到了 内置函数 htmlspecialchars。
构造方法的时候,运用了递归的方式。即如果是字符串,直接处理,如果是数组,则循环变量,把数组的键值提出了递归调用函数,相当于处理字符串了。不同是,数组和对象的写法不一样,所以需要先两个过程。遇到数组对象,先筛选数组,再按照对象的方式处理,最后仍然是处理字符串。。。
<?php /* Report all errors except E_NOTICE */ error_reporting(E_ALL ^ E_NOTICE); //当过滤对象为字符串 echo '字符串:'; $_str = '<strong>黑体</strong>'; echo $_str; echo '<br />'; echo htmlString($_str); echo '<br />'; //当过滤对象为数组 $_arr = array('font'=>'<strong>黑体</strong>','size'=>'<em>21</em>'); echo '数组:'; print_r($_arr); echo '<br />'; print_r(htmlString($_arr)); echo '<br />'; class Test{ public $font = '<strong>黑体</strong>'; public $size = '<em>21</em>'; public function getObject(){ return $this; } public function getArryObject(){ $_html=array(); $_html[] = $this; $_html[] = $this; return $_html; } } //当过滤对象为对象 $_obj = new Test(); echo '对象:'; print_r($_obj->getObject()); echo '<br />'; print_r(htmlString($_obj->getObject())); echo '<br />'; //当过滤对象为数组对象 $_arr_obj = new Test(); echo '数组对象:'; echo '<br />'; print_r($_obj->getArryObject()); echo '<br />'; print_r(htmlString($_obj->getArryObject())); function htmlString($_date){ if(is_array($_date)){ foreach ($_date as $_key => $_value) { $_string[$_key] = htmlString($_value); //递归方法 } }elseif(is_object($_date)){ foreach ($_date as $_key => $_value) { $_string->$_key = htmlString($_value); } }else{ $_string = htmlspecialchars($_date); } return $_string; } ?>