繁体   English   中英

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

[英]Why is PHP double escaping this string?

我有一个与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安装的配置。 在我的情况下,我的本地版本有一个关闭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

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

get_magic_quotes_gpc();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM