为什么PHP双重转义此字符串?

时间:2013-06-14 23:04:41

标签: php

我遇到的问题与PHP版本有关。

这是传递给url的原始字符串:

?path=/2013/6/14/1371207330-SBM1_Today\'s Touch Strongsville.xls

在PHP 5.3.21中,当我回显$ _GET ['path']时,它返回(错误):

/2013/6/14/1371207330-SBM1_Today\\\'s Touch Strongsville.xls

在PHP 5.3.15中,它返回正确的版本(正确):

/2013/6/14/1371207330-SBM1_Today\'s Touch Strongsville.xls

如何修复此问题,以便更高版本的PHP不添加额外的转义?

面向未来读者

该错误与PHP的版本无关,而是两个不同的php安装的配置。在我的情况下,我的本地版本有一个php.ini配置关闭magic_quotes,而客户共享托管服务提供商(HostGator)打开它。

2 个答案:

答案 0 :(得分:8)

这是(见IMSoP评论)PHP的一个可怕特征。它被称为“魔术引号”,可以在配置文件中启用和禁用。 Here's an article on disabling it.

简而言之,请将其放入php.ini

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

答案 1 :(得分:0)

检查你是否启用了魔法引号:

get_magic_quotes_gpc();

如果此函数返回true,那就是问题,你必须在php.ini中关闭它 http://php.net/manual/en/security.magicquotes.php