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

dor*_*emi 2 php

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

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

?path=/2013/6/14/1371207330-SBM1_Today\'s Touch Strongsville.xls
Run Code Online (Sandbox Code Playgroud)

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

/2013/6/14/1371207330-SBM1_Today\\\'s Touch Strongsville.xls
Run Code Online (Sandbox Code Playgroud)

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

/2013/6/14/1371207330-SBM1_Today\'s Touch Strongsville.xls
Run Code Online (Sandbox Code Playgroud)

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

对于未来的读者

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

the*_*ejh 8

这是(见IMSoP的评论)PHP的一个可怕特征.它被称为"魔术引号",可以在配置文件中启用和禁用.这是一篇关于禁用它的文章.

简而言之,把它放到你的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
Run Code Online (Sandbox Code Playgroud)

  • 更确切地说,这**是PHP的一个可怕特性,多年来一直被劝阻,并在5.4版本中被完全删除.万一有人认为他们可以用它作为抨击语言的借口. (2认同)