php数据过滤
① php中数据过滤的问题
我来解释一下吧
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);
略过
有问题再追问
② php数组的重复值如何过滤掉
array_unique() 函数移除数组中的重复的值,并返回结果数组。
当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。
返回的数组中键名不变。
array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。
③ PHP开发接口响应数据null怎么过滤
array_filter是只能去除掉一维的数组的null
function null_filter($arr)
{
foreach($arr as $key=>&$val) {
if(is_array($val)) {
$val = null_filter($val);
} else {
if($val === null){
unset($arr[$key]);
}
}
}
return $arr;
}
有现成的函数,默认可以过滤掉所有 ""、null、false如果单独只需要过滤掉null,那么类似如下代码写一个回调函数
function delete_null($vo){
if ($vo==null){
return false;
}
return true;
}
print_r(array_filter(array("aaa","bbb",null,"ccc"),"delete_null"));
④ php字符串过滤
$str = preg_replace("/^.+=(.+)$/", "新内容\\1", $str); //过滤等于号前面的所有字符串(包括等于号)
$str = preg_replace("/^(.+)=.+$/", "\\1"."新内容", $str); //过滤等于号后面的所有字符串(包括等于号)
⑤ php为什么要过滤参数
主要是防止sql注入
举例来说
如果$_GET['pwd']是你接受的参数
那么你不处理的话
如何我$_GET['pwd']里面是"'or'1";你的sql就无效了或者写删表语句"';drop····"
mysql_query("select*from表名wherepwd='$_GET[pwd]'");
还有就是数据本身可能不合法 如何 要int 你给的是string
⑥ PHP 过滤函数有哪些
①常用的安全函数:
mysql_real_escape_string()
addslashes()
②这些函数的作用:
mysql_real_escape_string()和addslashes()函数都是对数据中的
单引号、双引号进行转义!也就是防止sql注入!
但是mysql_real_escape_string()考虑了字符集,更加的安全一些!
经过查阅相关的资料,可以得出一个结论:当前的字符集是单字节的话,这两个函数作用相同,都可以起到转义过滤的作用,但是,有谁会只是用单字节呢?尤其是utf8越来越广泛的被使用到!
③函数的用法:
在了解mysql_real_escape_string()和addslashes()这两个函数的用法的时候,我们必须先了解另外两个函数的含义!
get_magic_quotes_gpc()和get_magic_quotes_runtime(),我们来比较一下两个函数的异同:
相同:
a、两者都是用来获取php.ini配置文件的配置情况的!当开启的时候返回1,关闭的时候返回0!
b、当开启的时候,都会对指定范围内的数据进行转义过滤!
⑦ php中过滤数组中的某个值
<?php
$bb=array('a');
$aa=array('a','b','c','d','e','f');
$cc=array_diff($aa,$bb);
print_r($cc);
?>
array_diff 返回2个数组的差集,数组元素多的放前面
⑧ php怎么过滤
使用单独一个模块,这个模块负责所有的安全处理。
这个模块被包含在所有公开的 PHP 脚本的最前端(或者非常靠前的部分)。
参考下面的脚本security.inc
<?php
switch($_POST['form'])
{
case'login':
$allowed=array();
$allowed[]='form';
$allowed[]='username';
$allowed[]='password';
$sent=array_keys($_POST);
if($allowed==$sent)
{
include'/inc/logic/process.inc';
}
break;
}
?>
⑨ php中如何过滤用户的输入麻烦告诉我
可以采用以下几点措施。
(1)在用户数据进入数据库之前使用addslashes()函数过滤,可以进行一些字符的转义,并过滤掉可能引起数据库问题的字符。可以使用stripslashes()将数据返回到原始形式。
(2)在php.infi中开启magic_quotes_gpc和magic_quotes_runtime指令。它们可以自动的添加和过滤斜杠,前者主要用于格式化GET,POST,和cookie变量,后者用于过滤进出数据库的数据。
(3)当在system()或者exex()函数中使用用户输入数据作为参数时,必须使用escapeshellcmd()。用来避免怀有恶意的用户强迫系统运行某些命令。
(4)可以使用stip_tags()从一个字符串中去掉HTML和PHP标记,这样可以避免用户将恶意节本植入到用户的数据中。
(5)可以使用htmlspecialchars(),可以将字符专程它们的HTML等价实体。例如,<将被转换成< ,该函数可以将任何脚本转换成无害的字符。
总之,在使用用户的数据时,一定要小心,原则即是不要相信用户输入的任何数据,必须要进行过滤和转换。