程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> PHP 中的 Addslashes 函數使用基礎教程

PHP 中的 Addslashes 函數使用基礎教程

編輯:PHP基礎知識
 

addslashes - 字符串加入斜線。


語法: string addslashes(string str);


內容說明


本函數使需要讓數據庫處理的字符串中引號的部份加上斜線,以供數據庫查詢 (query) 能順利運作。這些會被改的字符包括單引號 (')、雙引號 (")、反斜線 backslash (\) 以及空字符 NUL (the null byte)。
================
以上資料是官方的客套話,其實和沒說一樣。害得我還得親自做實驗。


1,表單提交中addslashes的表現。
首先要看get_magic_quotes_gpc()的值,一般為 1 。這時候從 <TEXTAREA> 提交的內容會自動加上斜線。
比如輸 ' 變成 \', " 變成 \" , \ 變成 \\
例子:


<html><head><title>test</title></head>
<body>
<FORM action="" method=post>
<TEXTAREA name=message rows="18" cols="55" >default text</TEXTAREA>
<INPUT type=submit value=Submit name=submit></FORM>
<?php
echo get_magic_quotes_gpc().

" A ".$POST['message'].


" B ".stripslashes($POST['message']);
?>
</body></html>


輸入:include('/home/me/myfile');
輸出:1 A include(\'/home/me/myfile\'); B include('/home/me/myfile');
總結:get_magic_quotesgpc()等於1的情況下,如果不輸入數據庫,那你得到的結果是加了斜線的。

 

================


2,提交輸入數據庫時addslashes的表現。


例子:


<html><head><title>test</title></head>
<body>
<FORM action="" method=post>
<TEXTAREA name=message rows="18" cols="55" >default text</TEXTAREA>
<INPUT type=submit value=Submit name=submit></FORM>
<?php
requireonce('includes/common.php');
$db>query("INSERT INTO `testtable` ( id , content ) VALUES ('1' , '".$POST['message']."')");
$query=$db->query("select * from `testtable` where `id`= 1;");
$Result=$db->fetch_array($query);
echo get_magic_quotes_gpc().

" A ".$POST['message'].


" B ".$Result['content'];
?>
</body></html>

 

輸入:include('/home/me/myfile');
輸出:1 A include(\'/home/me/myfile\'); B include('/home/me/myfile');
總結:get_magic_quotes_gpc()等於1的情況下,如果輸入數據庫後,再從數據庫直接讀取的時候,你不做任何修改就可以得到輸入的字符串。

 

==============

 

3, get_magic_quotes_gpc()
get_magic_quotes_gpc()在服務器是的設置是不能runtime修改的,也就是說,你必須在你的網頁代碼中預先考慮好不同的情況,不然,當你提交數據的時候,你還不知道服務器給你加了斜線沒有。以下兩個網上流行的函數可能是大家需要的,個人喜歡第二個:

function my_addslashes( $message ){
if(get_magic_quotes_gpc() 1 ){
return $message;
}else{
if(is_array($message)==true){
while(list($key,$value)=each($message)){
$message[$key]=my_addslashes($value);
}
return $message;
}else{
return addslashes($message);
}
}
}

 

 

 

function my_addslashes($data){
if(!get_magic_quotes_gpc()){
return is_array($data)?array_map('AddSlashes',$data):addslashes($data);
} else {
Return $data;
}
}


簡單的解釋就是,如果get_magicquotesgpc()等於 1 (服務器默認設置為 1 ),那我們的字符串是可以直接入庫的,不修改。不然,我們才用addslashes函數。

================

 

大家沒有看錯,我寫了半天,就是告訴大家,addslashes() 一般是不起作用的。倒是在不連數據庫的情況下,要用到stripslashes()函數,也就是把那討厭的斜線去掉。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved