【问题标题】:PHP backslash escapingPHP反斜杠转义
【发布时间】:2014-01-24 18:21:09
【问题描述】:
$backslash = '\\\\';
echo $backslash.$backslash;

将打印两个反斜杠,而我希望它打印四个。

还有,

$backslash = '\\';
echo $backslash.$backslash;

只会打印一个。

这是为什么呢?


编辑: 很抱歉浪费您的时间。
问题是我实际上并没有 echo 它,而是返回了存储在变量 $escaped 中的值,然后我做了其他实际导致问题的事情。

【问题讨论】:

  • 你在使用" "时得到相同的输出吗?
  • 是的,我愿意。这很奇怪。
  • 什么是php版本?
  • 无法复制,codepad.org/0KHqxYCC。必须是一些服务器/php 配置
  • 5.4.6、5.5.1 上还有 unable to reproduce

标签: php escaping quotes backslash


【解决方案1】:

正如预期的那样。 ' 引用的字符串只有两个需要在其中转义的元字符:'\' 必须被转义,否则你会提前终止字符串,并且由于\ 本身就是转义字符,它也必须被转义。

例如

<?php
$foo = '\\\';
echo $foo;

执行时会产生:

PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE in test.php on line 3

因为前两个\ 相互转义,成为字符串内的单个文字\,而第三个\ 转义',导致字符串跑出行尾并导致字符串的echo $foo PART

我无法重现您的第二个示例。 $foo = '\\'; 将为字符串分配一个反斜杠,并且由于您要打印两次变量,因此应该将 \\ 作为您的输出。


跟进:使用此代码:

$two_slashes = '\\';
$four_slashes = '\\\\';
echo $two_slashes . $two_slashes . "\n";
echo $four_slashes . $four_slashes . "\n";

我明白了:

\\
\\\\

正如预期的那样作为输出。这是 PHP 5.3.3 (Redhat enterprise 65.3)

【讨论】:

  • 是的,但这就是为什么我希望 '\\\\' 是两个反斜杠,因此当我回显它两次得到 4 时。
  • @Jenox 当回显'\\\\' 时我得到两个!您必须检查 php.net/manual/en/security.magicquotes.php 并将其关闭!
  • 魔术引号:此功能自 PHP 5.3.0 起已弃用,自 PHP 5.4.0 起已删除。
  • 我知道.. 但是我的服务器按预期返回所有内容.. 4 个反斜杠变成 2. 一切都正确!?
  • 完全是我的错,检查我的编辑。不过感谢您的宝贵时间。
【解决方案2】:
$backslash = '\\\\';
echo $backslash.$backslash;

输出 = \\\\

$backslash = '\\';
echo $backslash.$backslash;

输出=\\

有什么问题?

【讨论】:

  • 我没有得到这个输出,这是夏洛克的问题。请阅读我的问题。
猜你喜欢
  • 2015-05-19
  • 2015-09-21
  • 2011-11-09
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多