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等價實體。例如,<將被轉換成< ,該函數可以將任何腳本轉換成無害的字元。
總之,在使用用戶的數據時,一定要小心,原則即是不要相信用戶輸入的任何數據,必須要進行過濾和轉換。