转义字符的实现是否在JavaScript和PHP中类似地工作,或者两者的实现是否有任何差异


Does the implementation of escape character work similarly in JavaScript and PHP or is there any difference in both the implementations?

我有一个使用'转义字符

的工作JavaScript代码

此反斜杠转义字符将特殊字符转换为字符串字符

<!DOCTYPE html>
<html>
  <body>
    <p id="demo"></p>
    <script>
      var x = 'It''s alright';
      var y = "We are the so-called '"Vikings'" from the north.";
      document.getElementById("demo").innerHTML = x + "<br>" + y; 
    </script>
  </body>
</html>

以上代码在浏览器中的输出如下:

It's alright
We are the so-called "Vikings" from the north.

我的问题是'转义字符的实现是否在PHP中以类似的方式工作,或者在PHP中实现有任何差异?

谢谢。

我的问题是'转义字符的实现是否在PHP以及[JavaScript]中以类似的方式工作

是的。

或者在PHP中的实现有什么不同?

是的。关于反斜杠作为转义,有两个重要的区别:

  • 在PHP中,使用反斜杠作为转义是非常不同的,这取决于您是使用单引号字符串('foo')还是双引号字符串("foo")。

  • 转义序列是不同的,尽管有很多重叠。

单引号与双引号

在PHP中,单引号和双引号字符串在转义序列方面有很大的区别(以及更多,参见下面的¹)。文档中的详细信息,但在单引号字符串中,如果下一个字符是'或反斜杠,则反斜杠仅是转义字符;在所有其他情况下,它是一个字面反斜杠。所以

echo 'foo'nbar';

输出<>之前foo ' nbar之前

echo "foo'nbar";

输出<>之前喷火酒吧之前

在JavaScript中,单引号字符串和双引号字符串之间的唯一区别是'"是否可以不转义。您可以在两者中使用的转义序列完全相同。

转义序列

上面链接的PHP文档列出了PHP转义序列。JavaScript规范列出了JavaScript转义序列,尽管MDN的列表更容易阅读。同样,它们有很多重叠之处(都受到C语言的启发),但也有不同之处。

¹只要我们在讨论PHP字符串和JavaScript字符串,请注意,在双引号PHP字符串中,变量是扩展的;在单引号中,它们不是。JavaScript没有这样的功能,但是它在ES2015中有类似的(甚至更强大的)新模板字面量。