我需要在后面的字符串中用 '' 替换\。
$x = "FBU4061\0258";
当我执行 $x = str_replace('\\', '', $x);
它返回 FBU40618,
是否有任何解决方法来获取 FBU40610258。
注意:我需要在双引号内执行此操作。在单引号内,它会毫无问题地返回所需的值。
最佳答案
这里可能让您感到困惑的是,双引号字符串对这个字符串的解释与单引号字符串截然不同。 PHP 中的字符串 "FBU4061\0258"
会将字符串的 \02
部分解释为 STX(或文本开头)字符(即 ASCII 字符 02
)。
只需尝试在 PHP 中运行代码 var_dump("FBU4061\0258");
并亲眼看看输出与您预期的有何不同。您甚至可以执行 var_dump(bin2hex("FBU4061\0258"));
并查看字符串的十六进制表示以进一步说明...
例子
var_dump(bin2hex('\02'));
// string(6) "5c3032"
var_dump(bin2hex("\02"));
// string(2) "02"
看出区别了吗?
This is all thoroughly documented behavior in the manual .
\[0-7]{1,3}
the sequence of characters matching the regular expression is a character in octal notation
因此,为了获得 FBU4061\0258
的字符串文字,您必须转义双引号字符串中的反斜杠。
$x = "FBU4061\\0258";
$x = str_replace('\\', '', $x);
var_dump($x); //string(11) "FBU40610258"
请注意,这是因为您在代码中放置了一个字符串文字。但是,如果从您的数据库中检索到此字符串,则不会进行此插值,因为它已经是字符串文字。
再次……
var_dump("FBU4061\\0258"); // string(12) "FBU4061\0258"
var_dump("FBU4061\0258"); // string(9) "FBU40618"
看看字符串长度的明显区别吧!
关于反斜杠的 PHP str_replace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33602806/