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 -- 执行正则表达式的搜索和替换,括号里面的正则表达式意思是:.......
帮帮忙,谢谢大家。
请清晰一些,一句一句来
小弟比较笨
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里面可以用xx;来对一些字符进行编码,比如 (空格), ߷ 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);