问题:
当我们在向 mysql 写入数据时, 如果数据中有特殊字符就会出现数据无法正常入库的情况, 比如:
mysql_query("update table set `name`='make's'");
而这个时候一般就是使用 addslashes() 这个函数来转义数据中的特殊字符
处理方法
PHP 为了安全性, 所以引入了个
magic_quotes_gpc = On
的功能, 可以不需要做任何处理就能直接把单引号插入数据库中, 那么对于 Off 时, 则需要考虑单引号的问题了, 而不是一味地信任运行环境.
当
magic_quotes_gpc = On
时, 使用了 addslashes() 处理后的数据在数据库中将以 \'形式保存, 如果此时直接输出的话, 就会发现比自己期待的内容多了个 \, 因此 stripslashes() 出场了, 它能把 \ 去掉 (区别于
- str_replace("\", "",$Str)
- ).
当
magic_quotes_gpc = Off
时, 使用了 addslashes() 处理后的数据在数据库中将以'形式保存, 没有上面说的有 \ 的问题, addslashes() 起到插入数据不出错的作用, 如果此时直接输出的话, 数据正常. 不需要再用 stripslashes() .
addslashes() 和 stripslashes() 正好是相反的, 直接记忆: addslashes() 加个 \,stripslashes() 去个 \
那么什么时候用呢?
简单说:
当
magic_quotes_gpc = On
时, 系统会自动处理单引号等问题, 用不用 addslashes() 和 stripslashes() 都没关系, 但是如果添加数据时用了 addslashes() , 那么显示数据时必须要 stripslashes()
当
magic_quotes_gpc = Off
时, 系统不会处理单引号等问题, 所以插入数据时必须要使用 addslashes() , 显示数据时则不需要使用 stripslashes() .
既然有了分析, 做程序时要怎么办呢? 根据以上两种情况, 可得:
不管 magic_quotes_gpc 是 On 还是 Off, 咱添加数据时都用 addslashes() , 当 On 时, 必须使用 stripslashes(),Off 时则不能用 stripslashes() .
php 判断是否开启 get_magic_quotes_gpc
$str = (!get_magic_quotes_gpc()) ? addslashes($str) : $str;
来源: http://www.bubuko.com/infodetail-2572515.html