Addslashes似乎有点混乱.给出以下2行代码
$name = "Dave's test";
$newName = addslashes($name);
Run Code Online (Sandbox Code Playgroud)
我期待 $ newName成为"Dave的测试"(我的单引号很好地逃脱了)
但是,我得到的是"Dave \\'的测试"(注意DOUBLE反斜杠).这与我在addslashes上可以找到的所有在线文档相矛盾 - 并且让我感到非常悲痛.
我通过error_log将addslashes结果转换为http错误日志之前和之后...
error_log("before=$name after=$newName");
Run Code Online (Sandbox Code Playgroud)
结果...
before=Dave's test after=Dave\\'s test
Run Code Online (Sandbox Code Playgroud)
注意 - 这是ajax过程的一部分,所以我无法真正"回应"结果.
任何有关为什么addlashes会在后退上加倍的见解都非常感激.
仅供参考:我在Linux下使用PHP 5.2.6,魔术报价为OFF.
看起来error_log在内部调用了addlashes。阅读了对我的原始问题的回复后,我创建了一个非常简单的脚本...
<?php
$name = "Dave's test";
$newName = addslashes($name);
echo "name=$name. newName=$newName";
error_log("name=$name. newName=$newName");
?>
Run Code Online (Sandbox Code Playgroud)
回声的结果:
name=Dave's test. newName=Dave\'s test
Run Code Online (Sandbox Code Playgroud)
error_log的结果:
name=Dave's test. newName=Dave\\'s test
Run Code Online (Sandbox Code Playgroud)
非常感谢所有花时间阅读和评论此问题的人。这是我对Stack Overflow的第一个问题,响应速度之快让我震惊。多么伟大的社区!
我的猜测是,该error_log()功能正在用另一个反斜杠转义反斜杠本身。
从技术上讲,所表示的字符串中仅包含 1 个反斜杠,这是所需的结果。
尝试将此作为一个简单的测试:
error_log('\a')
Run Code Online (Sandbox Code Playgroud)
看看你是否进入\\a日志