【问题标题】:How do you make a string in PHP with a backslash in it? [closed]如何在 PHP 中创建一个带有反斜杠的字符串? [关闭]
【发布时间】:2011-06-13 11:28:46
【问题描述】:

我需要一个反斜杠作为字符串的一部分。我该怎么做?

【问题讨论】:

标签: php


【解决方案1】:

当反斜杠 \ 没有转义字符串的终止引号或以其他方式创建有效的转义序列(在双引号字符串中)时,则其中任何一个都可以生成一个反斜杠:

$string = 'abc\def';
$string = "abc\def";
//
$string = 'abc\\def';
$string = "abc\\def";

当转义下一个字符会导致解析错误(字符串的终止引号)或有效的转义序列(在双引号字符串中)时,需要对反斜杠进行转义:

$string = 'abcdef\\';
$string = "abcdef\\";

$string = 'abc\012';
$string = "abc\\012";

【讨论】:

  • 在这个特殊的例子中,反弹可能是单一的。然而,逃避它是一种很好的做法。但是对于单引号。
  • 对于单引号,如果反斜杠位于字符串的末尾,这将不起作用。在单引号中使用双反斜杠适用于所有场景 - 无论引号类型如何,后一个示例都更好。
【解决方案2】:

简答

使用两个反斜杠。

长答案

有时您可以使用一个反斜杠,但有时您需要两个。何时可以使用单个反斜杠取决于两件事:

  • 你的字符串是用单引号还是双引号括起来和
  • 反斜杠后面的字符。

如果你有一个双引号字符串,反斜杠在许多情况下被视为转义字符,所以最好总是用另一个反斜杠来转义反斜杠:

$s = "foo\\bar"

在单引号字符串中,反斜杠将是文字,除非它们后跟单引号或另一个反斜杠。因此,要输出带有单引号字符串的单反斜杠,您通常可以这样写:

$s = 'foo\bar'

但是要连续输出两个反斜杠,你需要这样:

$s = 'foo\\\\bar'

如果你总是使用两个反斜杠,你永远不会错。

【讨论】:

  • 我确实喜欢 if( !preg_match( '/^[\\\,.\d\pL]*$/u', $_POST['some_text'] ) ) { ... } 所以为了逃避反斜杠我不得不使用 3 个反斜杠 \\\。尝试了一个和两个,没有工作。不明白为什么 3
  • @user2118559 单引号字符串中的前两个生成一个,第三个单独保留(不跟单引号或反斜杠)。因此在传递给正则表达式的字符串中插入了两个反斜杠。然后正则表达式使用第一个转义第二个,产生一个“真实”(= 在文本中真正找到)退格字符。您可以改用四个(四个变成两个,解析字符串,然后剩下的两个变成一个,解析正则表达式),就像这个答案正确建议的那样。
【解决方案3】:

您必须转义所有反斜杠,例如 "c:\\windows\\"

【讨论】:

    猜你喜欢
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 2022-01-23
    相关资源
    最近更新 更多