语法: string addslashes(string str);  
内容说明  
本函数使需要让数据库处理的字符串中引号的部份加上斜线,以供数据库查询 (query) 能顺利运作。这些会被改的字符包括单引号 (')、双引号 (")、反斜线 backslash (\) 以及空字符 NUL (the null byte)。  
================================================================  
1,表单提交中addslashes的表现。  
首先要看get_magic_quotes_gpc()的值,一般为 1 。这时候从 <TEXTAREA> 提交的内容会自动加上斜线。  
比如输入 ' 变成 \' , " 变成 \" , \ 变成 \\  
例子:  
PHP代码:  
代码如下: 
 
- <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_quotes_gpc()等于1的情况下,如果不输入数据库,那你得到的结果是加了斜线的。  
2,提交输入数据库时addslashes的表现。  
例子:  
PHP代码:  
代码如下: 
 
- <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 
 
 - require_once('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修改的,也就是说,你必须在你的网页代码中预先考虑好不同的情况,不然,当你提交数据的时候,你还不知道服务器给你加了斜线没有。以下两个网上流行的函数可能是大家需要的,个人喜欢第二个:  
PHP代码:  
代码如下: 
 
- 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); 
 
 - } 
 
 - } 
 
 - }
 
 
  复制代码 
 
 
PHP代码:  
代码如下: 
 
- function my_addslashes($data){ 
 
 - if(!get_magic_quotes_gpc()) { 
 
 - return is_array($data)?array_map('AddSlashes',$data):addslashes($data); 
 
 - } else { 
 
 - Return $data; 
 
 - } 
 
 - }
 
 
  复制代码 
 
 
简单的解释就是,如果get_magic_quotes_gpc()等于 1 (服务器默认设置为 1 ),那我们的字符串是可以直接入库的,不修改。不然,我们才用addslashes函数。 |