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

为什么PHP双重转义这个字符串?,php,Php,我有一个问题与PHP版本有关 以下是传递到url的原始字符串: ?path=/2013/6/14/1371207330-SBM1_Today\'s Touch Strongsville.xls 在PHP5.3.21中,当我echo$_GET['path']时,它返回(错误): 在PHP 5.3.15中,它返回正确的版本(正确): 我如何解决这个问题,使PHP的更高版本不会添加额外的转义 面向未来读者 该错误与PHP版本无关,而是与两个不同PHP安装的配置有关。在我的例子中,我的本地版本有一个关

我有一个问题与PHP版本有关

以下是传递到url的原始字符串:

?path=/2013/6/14/1371207330-SBM1_Today\'s Touch Strongsville.xls
在PHP5.3.21中,当我echo$_GET['path']时,它返回(错误):

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

我如何解决这个问题,使PHP的更高版本不会添加额外的转义

面向未来读者

该错误与PHP版本无关,而是与两个不同PHP安装的配置有关。在我的例子中,我的本地版本有一个关闭了magic_quotes的php.ini配置,而客户共享主机提供商(HostGator)将其打开。

这是php的一个可怕特性(请参见IMSoP的评论)。它被称为“魔术引号”,可以在配置文件中启用和禁用

简而言之,将其放入您的
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

检查是否已启用“魔法引号”:

get_magic_quotes_gpc();
如果此函数返回true,那么这就是问题所在,您必须在php.ini中将其关闭

google
magic\u quotes
您确定原始字符串中需要反斜杠吗?您确定两个版本的PHP都使用相同的配置(PHP.ini)文件,以及完全相同的web服务器版本和配置吗?我没有看到PHP的更改日志中有任何明显的变化,这会对那些版本之间的URL转义产生任何影响。HostGator在默认情况下启用了魔法引号。是时候找出如何禁用它了。这就是我讨厌共享主机的原因……更准确地说,这是PHP的一个可怕特性,多年来一直不鼓励使用,在5.4版中被完全删除。以防万一有人认为他们可以用它作为抨击这种语言的借口。@IMSoP:但我喜欢抨击PHP!:(
; 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
get_magic_quotes_gpc();