转义单引号时,PHP Addslashes添加双反斜杠

P.S*_*tti 6 php

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.

P.S*_*tti 5

看起来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的第一个问题,响应速度之快让我震惊。多么伟大的社区!


Joh*_*sch 0

我的猜测是,该error_log()功能正在用另一个反斜杠转义反斜杠本身。

从技术上讲,所表示的字符串中仅包含 1 个反斜杠,这是所需的结果。

尝试将此作为一个简单的测试:

error_log('\a')
Run Code Online (Sandbox Code Playgroud)

看看你是否进入\\a日志