我有一个与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)打开了它.
这是(见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)