php中数据过滤的问题

function check_str($string, $isurl = false)
{
$string = preg_replace('/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/','',$string);
$string = str_replace(array("\0","%00","\r"),'',$string);
empty($isurl) && $string = preg_replace("/&(?!(#[0-9]+|[a-z]+);)/si",'&',$string);
$string = str_replace(array("%3C",'<'),'<',$string);
$string = str_replace(array("%3E",'>'),'>',$string);
$string = str_replace(array('"',"'","\t",' '),array('"',"'",'',''),$string);
return trim($string);
}
这里是一个php的对字符串的过滤的方法
有谁能帮我一句一句解释一下,有什么作用么?
比如第一句:$string = preg_replace('/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/','',$string);
preg_replace -- 执行正则表达式的搜索和替换,括号里面的正则表达式意思是:.......
帮帮忙,谢谢大家。
请清晰一些,一句一句来
小弟比较笨

第1个回答  2013-11-18
我来解释一下吧
preg_replace('/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/','',$string);

去掉控制字符,你google一下ascii table就知道了,php里面 - 代表范围,比如\x00-\x08指的是ASCII代码在\x00到\x08范围的字符,\x0A和\x0D代表回车换行,所以没包含在这个里面,否则直接\x00-\x1F了,

$string = str_replace(array("\0","%00","\r"),'',$string);
\0表示ASCII 0x00的字符,通常作为字符串结束标志

$string = preg_replace("/&(?!(#[0-9]+|[a-z]+);)/si",'&',$string);

我们知道HTML里面可以用&#xxx;来对一些字符进行编码,比如 (空格), ߷ Unicode字符等,A(?!B) 表示的是A后面不是B,所以作者想保留 ߷类似的 HTML编码字符,去掉其他的问题字符,比如 &123; &#nbsp;

str_replace(array("%3C",'<'),'<',$string);

第一个'<'多余吧,%3C是编码以后的 <, 一般用在URL编码里

str_replace(array("%3E",'>'),'>',$string);

str_replace(array('"',"'","\t",' '),array('"',"'",'',''),$string);

略过

有问题再追问追问

不明白啊,大佬。能不能简单点,直接告诉我第一句是过滤什么
第二句是过滤什么,防范的是xss还是防范SQL注入。第三第四.. ... 你这样还比较好。
我能不能在
$string = str_replace(array('"',"'","\t",' '),array('"',"'",'',''),$string);
插入一句$String = addslashes($String);

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网