说下PHP的urlencode/urldecode/addslashes重复操作


PHP #urlencode #urldecode #addslashes #函数2012-05-15 22:22
1.许多字符串是不符合URL对GET变量的要求的,比如中文字符串,如果不进行处理,会出现意想不到的情况,比如乱码,再比如在URL中具有连接GET变量作用的‘&’。使用urlencode可以对GET变量进行编码,将不符合要求的变量转换为(%**)的形式。

2.相对的,将编码之后的代码转换为正常编码就是urldecode。这里面有个重大陷阱,浏览器会自动进行urldecode的工作,这样你对GET变量进行urldecode操作就会出现双重解码的错误。一般情况下,这种错误不会被发现,因为解码过后的变量二次解码,大部分变量都会保持不变,但是至少有一个变量是例外,那就是加号(+)。为什么?因为加号被编码为"%2b",浏览器解码为“+”,如果再一次解码,就会变成“ ”(空格)。原因是因为空格在编码的时候会转换成加号(+)。这一定要引起注意,尽量避免重复解码。解决方法:http://yige.org/p/239

3.addslashes()有什么作用呢?它的用意很明显,就是源于sql中一个叫"magic_quotes"(魔法引号)的说法。因为引号在SQL中具有特殊作用,它一般用于界定查询的字符串。使用addslashes可以对这些特殊字符进行转义以便SQL。这些字符包括单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。 但是PHP有一个配置指令,叫"magic_quotes_gpc“,这个指令可以GET,POST,COOKIE变量自动进行这样的操作,这样一来,就有可能重复进行转义,这样的错误是致命的。比如单引号,首先进行指令转义为'进行插入,然后addslashes又转换为\\',最终插入数据库的是'。对于那些使用公共服务器并且无法对php.ini进行配置的用户来说,可以检测magic_quotes_gpc,函数为get_magic_quotes_gpc()。返回的值是1,表明on,返回的值是0,表明off。

相关文章

粤ICP备11097351号-1