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);

php中数据过滤的问题
去掉控制字符,你google一下ascii table就知道了,php里面 - 代表范围,比如\\x00-\\x08指的是ASCII代码在\\x00到\\x08范围的字符,\\x0A和\\x0D代表回车换行,所以没包含在这个里面,否则直接\\x00-\\x1F了,string = str_replace(array("\\0","%00","\\r"),'',$string);\\0表示ASCII 0x00的字符...

PHP过滤问题 preg_match("\/^[0-9a-zA-Z]*$\/",$str)
这个\/^[0-9a-zA-Z]*$\/正则,匹配的string必须有0-9z-aA-Z组成,你加了定位符,所以不能含有其他字符;如果你只是想判断string里面有没有字母和数字,可以去掉定位符preg_match("\/[0-9a-zA-Z]*\/",$str)

php多条件查询问题,怎么过滤空值?
是的正如你所说有两种解决方案,第一种是采用PHP的方式,先判断数据的合法性,比如是否提交了空值(推荐使用,没有垃圾数据);第二种不做任何判断,空值也能提交到数据库,只是在SQL查询时过滤空值数据(不推荐使用,有垃圾数据)。解决方案1(通过PHP过滤空值数据):if ($_POST['字段'] == '') exit...

php 怎么把循环出来的值一样的过滤掉,如下图,怎么把itemes ,只显示一...
可以使用php的内置函数array_unique($arr)即可移除数组中重复的值

如何正确运用PHP filter判断过滤数据
第一种、PHP filter判断一个变量的内容是否符合要求使用函数filter_var,第一个参数是要判断的变量。第二个参数是判断的要求,FILTER_VALIDATE_EMAIL表示判断是否符合email格式。如果变量是类似’boy@163.com’的数据,系统就会完整的输出‘boy@163.com’。如果是错误的格式,比如&...

phpstrom&IDEA 数据库工具中过滤不常用的表
1. 登录到 IDE(如 PHPStorm 或 IntelliJ IDEA)。2. 进入“Data Sources and Drivers”设置界面。3. 通过数据库连接,确保能够访问数据库。4. 在设置中找到“Options”选项。5. 在“Objective filter”中输入过滤规则,以隐藏不必要的表。例如,可以设置为“table:ims_ewei_shop_member.*”、“...

PHP漏洞有哪些
首先和ASP一样,对敏感字符过滤不严会导致注入..还有PHP很有特点,他得运行程序是很人性化得,如果设置不好,随便提交个有错得地址之类就会告诉你绝对路径之类得敏感信息.PHP包含过滤不严会导致读取任意文件.变量过滤不严会导致伪造数据欺骗服务器.等等等等好多..我说得这些都是比较常见和常用得 ...

关于php使用正则表达式过滤table标签,包含里面的内容也一起过滤掉,注意...
preg_match("\/^(.*?)<table.*?<\\\/table>$\/", $content, $match);match[]里面就有你要的内容 注意*符号的贪婪性,用?可以使之变懒惰

$_post获取数据中过滤了应该怎么处理啊? - 技术问答
function post_check($post) {? ?if (!get_magic_quotes_gpc()) {? ? $post = addslashes($post);}? ?$post = str_replace(\\"_\\", \\"\\\\_\\", $post);$post = str_replace(\\"%\\", \\"\\\\%\\", $post); $post = htmlspecialchars($post);return $post;? ?我用的这个,请问...

php安全过滤代码
php安全篇值过滤用户输入的人参数规则1:绝不要信任外部数据或输入关于Web应用程序安全性,必须认识到的第一件事是不应该信任外部数据。外部数据(outside data) 包括不是由程序员在PHP代码中直接输入的任何数据。在采取措施确保安全之前,来自任何其他来源(比如 GET 变量、表单 POST、数据库、配置文件、会话变量或 cooki...

相似回答