现在的位置: 首页 > 综合 > 正文

php 数据过滤笔记

2014年01月10日 ⁄ 综合 ⁄ 共 1315字 ⁄ 字号 评论关闭

从数据库读取数据,有的数据直接放到前台显示。如果遇到一些具有可自行的文本标记。那么前台就会容易解析,导致页面布局混乱。为了防止这样的情况,需要对提出的数据进行转换。主要用到了 内置函数 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; 
	}
?>
【上篇】
【下篇】

抱歉!评论已关闭.