Discuz教程网

PHP addslashes 函数详细分析说明

[复制链接]
authicon dly 发表于 2011-9-10 20:07:10 | 显示全部楼层 |阅读模式
语法: string addslashes(string str);
内容说明
本函数使需要让数据库处理的字符串中引号的部份加上斜线,以供数据库查询 (query) 能顺利运作。这些会被改的字符包括单引号 (')、双引号 (")、反斜线 backslash (\) 以及空字符 NUL (the null byte)。
================================================================
1,表单提交中addslashes的表现。
首先要看get_magic_quotes_gpc()的值,一般为 1 。这时候从 <TEXTAREA> 提交的内容会自动加上斜线。
比如输入 ' 变成 \' , " 变成 \" , \ 变成 \\
例子:
PHP代码:
代码如下:

  1. <html><head><title>test</title></head>
  2. <body>
  3. <FORM action="" method=post>
  4. <TEXTAREA name=message rows="18" cols="55" >default text</TEXTAREA>
  5. <INPUT type=submit value=Submit name=submit></FORM>
  6. <?php
  7. echo get_magic_quotes_gpc().
  8. " A ".$_POST['message'].
  9. " B ".stripslashes($_POST['message']);
  10. ?>
  11. </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代码:
代码如下:

  1. <html><head><title>test</title></head>
  2. <body>
  3. <FORM action="" method=post>
  4. <TEXTAREA name=message rows="18" cols="55" >default text</TEXTAREA>
  5. <INPUT type=submit value=Submit name=submit></FORM>
  6. <?php
  7. require_once('includes/common.php');
  8. $db->query("INSERT INTO `testtable` ( id , content ) VALUES ('1' , '".$_POST['message']."')");
  9. $query=$db->query("select * from `testtable` where `id`= 1;");
  10. $Result=$db->fetch_array($query);
  11. echo get_magic_quotes_gpc().
  12. " A ".$_POST['message'].
  13. " B ".$Result['content'];
  14. ?>
  15. </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代码:
代码如下:

  1. function my_addslashes( $message ){
  2. if(get_magic_quotes_gpc()== 1 ){
  3. return $message;
  4. }else{
  5. if(is_array($message)==true){
  6. while(list($key,$value)=each($message)){
  7. $message[$key]=my_addslashes($value);
  8. }
  9. return $message;
  10. }else{
  11. return addslashes($message);
  12. }
  13. }
  14. }
复制代码



PHP代码:
代码如下:

  1. function my_addslashes($data){
  2. if(!get_magic_quotes_gpc()) {
  3. return is_array($data)?array_map('AddSlashes',$data):addslashes($data);
  4. } else {
  5. Return $data;
  6. }
  7. }
复制代码



简单的解释就是,如果get_magic_quotes_gpc()等于 1 (服务器默认设置为 1 ),那我们的字符串是可以直接入库的,不修改。不然,我们才用addslashes函数。



上一篇:需要发散思维学习PHP
下一篇:PHP程序员编程十条戒律
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-3 23:12

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表