PHP中stripslashes和addslashes的使用
向mysql写入数据时,如:mysql_query("update tableName set `title`='goaler's blog'");
这个时候,PHP将会报错,ASP中处理时也一样。
因为数据库对单引号过敏。
ASP中需要进行replace("'","''",str);
而PHP中则可以直接使用addslashes。
ASP问题这里暂不考虑,本文要说的是PHP相关的stripslashes和addslashes。
PHP考虑到其安全性,引入了magic_quotes_gpc = On/Off 这个参数,可以在不做任何处理的情况下就直接将含有单引号的数据插入数据库中。如果magic_quotes_gpc = Off,需要考虑单引号的问题了,不能一味地信任其运行环境。
当magic_quotes_gpc = On时,使用addslashes()处理后的数据在数据库中将以\'形式保存,如果此时直接输出的话,就会发现比自己原先输入的内容多了个(反斜杠)\,这时就需要用到stripslashes()了,它能把addslashes()处理时自动加上去的(反斜杠)\去掉。这跟区别于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()。
如何判断On还是Off呢?用get_magic_quotes_gpc()。
相关文档:
注:这是从PHPCMS开发文档里看到编码规范,虽名为PHPCMS的开发规范,但我觉得所有的PHP编程都该如此。写了那么多PHP,很多编码对照这规范都感觉欠缺很多,今后一定要对照纠正。
Phpcms 编码规范
1. 引言…. 2
2. 适用范围…. 2
3. 标准化的重要性和好处…. 3
4. PHP编码规范与原则…. 3
4. ......
function _processBeforeDb($str)
{
$str = str_replace ( array ('<', '>' ), array ('<' , '>' ), $str );
if (!get_magic_quotes_runtime()){
return addslashes($str);
}
else
{
return $str;
}
}
......
Linux下安装PHP5的主要步骤:
1.下载php5;地址:http://cn.php.net/downloads.php
2.解压软件包后进入该目录
(转者注:
可能会需要先解压php-5.*.tar.bz2 ,先执行bzip2 -d php-5.*tar.bz2
)
tar -xvf php-5.*.tar.gz
cd php-5.*
3.php安装mysql的模块的一些准备工作
ln -s /usr/local/mysql/lib/mysql /usr/l ......
memcache::debug
bool memcache_debug ( bool $on_off )
说明:
控制调试功能,前提是php在编译的时候使用了-enable-debug选项,否则这个函数不会有作用。
参数:
$on_off:true表示开启调试,false表示关闭调试
返回值:
如果php在编译的时候使用了-enable-debug选项,返回true,否则返回false
Memcache::decremen ......