PHP语法中的“\”实际意味着什么?

时间:2012-03-28 04:23:13

标签: php string

我有一段代码,我不断收到像以下代码的语法错误:

$query ="SELECT * from `jos_menu` where `id` = ".'\".$parent.'\";

现在当我将其重新格式化为:

$query ="SELECT * from `jos_menu` where `id` = ".$parent;

这是我删除的时间:' \" 它工作正常。所以我只是想知道,(' \" )实际上做了什么???

6 个答案:

答案 0 :(得分:2)

\是转义字符。这意味着下一个角色应该从字面上理解,而不关心它的特殊含义。

在PHP中,如果字符串用双引号分隔(并且开发人员只需要前面的单引号),通常会在字符串中看到'\"

答案 1 :(得分:1)

它表示转义的字符。在它之后出现的下一个字符将被视为其当前形式。

您的查询被错误地转义

$query ="SELECT * from `jos_menu` where `id` = ".'\".$parent.'\";
                                               //^ You mismatched the quotes from here

正确转义的查询应为

$query ="SELECT * from `jos_menu` where `id` = \"$parent\"";
                                           //  ^ Note here " will printed as it is within the query

例如, 如果$parent2,则查询为

 SELECT * from `jos_menu` where `id` = "2"

答案 2 :(得分:1)

它工作正常,因为你有一个数值 - 所以mysql会自动将一个字符串转换为一个数字。所以你得到2个不同的查询(假设$parent = 42;

SELECT * from `jos_menu` where `id` = 42

VS

SELECT * from `jos_menu` where `id` = "42"

答案 3 :(得分:0)

一些事情:

  • 要表示文字的下一个字符,'\'' //输出单个'
  • 特殊字符,\n换行符,\t标签字符等

答案 4 :(得分:0)

反斜杠在它之后逃脱了下一个字符;在你的例子中,这将起作用:

$query = "SELECT * from jos_menu where id = ".$parent;

但是这样:

$query = "SELECT * from jos_menu where id = $parent";

当转义引号时,它会根据使用的括号类型而有所不同。使用双括号,您可以将变量直接包含在字符串中,只需注意按键访问数组:

$var = "This \"works\" ".$fine.".";
$var = "This 'also' works just $fine.";
$var = "This $will['fail'].";
$var = "However, $this[will] work and so ".$will['this'].".";

同样的规则适用于单括号。

答案 5 :(得分:0)

唯一的问题
$query ="SELECT * from `jos_menu` where `id` = ".'\".$parent.'\";

你错过了一些'

$query ="SELECT * from `jos_menu` where `id` = ".'\"'.$parent.'\"';

在PHP中,字符串可以是:

$var = 'This is a string';

或者

$var = "This is a string";

如果要将"放在已经使用"开始的字符串中,则需要告诉PHP您不希望第二个"结束字符串但是使用字符"作为字符串本身的一部分。这就是\"的作用。它告诉PHP 不要给"字符赋予任何特殊含义;因为通常如果您使用"启动字符串,则下一个"将结束字符串。

\表示删除下一个字符的任何“特殊”含义

这仅适用于\之后的角色具有特殊含义的情况。一些例子:

假设我们要打印Hello "World". I am a string!

$var = "Hello "World". I am a string!";

在这个例子中,我们会有错误。由于我们使用"启动了字符串,因此下一个"将关闭字符串。那么PHP的想法是什么:

  1. "字符串开头
  2. Hello字符串变量的一部分。
  3. "嘿,因为我看到字符串是以"开头的,所以这必定意味着结束了!
  4. World"< - 错误
  5. 停止处理并抛出错误。

    但是,如果我们写:

    $var = "Hello \"World\". I am a string!";
    

    现在,PHP认为:

    1. "字符串开头
    2. Hello字符串变量的一部分
    3. \啊,好吧,下一个字符我应该删除任何特殊含义
    4. "好的,这是在\之后,所以我只是正常使用它,"
    5. World字符串的一部分
    6. \好的,下一个字符我将删除任何特殊含义
    7. "现在这是正常的"
    8. . I am a string! - 字符串变量的一部分。
    9. "啊!由于字符串是以"开头的,因此必须是结尾。
    10. ;结束陈述。
    11. 希望这能为您澄清事情。