我需要在以下字符串中将 \ 替换为 ''。
$x = "FBU4061\0258";
当我执行 $x = str_replace('\\', '', $x);
它返回 FBU40618,
是否有任何解决方法可以获得 FBU40610258。
注意:我需要在双引号内执行此操作。在单引号内,它可以毫无问题地返回所需值。
$x = "FBU4061\0258";
当我执行 $x = str_replace('\\', '', $x);
它返回 FBU40618,
是否有任何解决方法可以获得 FBU40610258。
注意:我需要在双引号内执行此操作。在单引号内,它可以毫无问题地返回所需值。
"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"
看到区别了吗?
\[0-7]{1,3}
匹配该正则表达式的字符序列是一个八进制表示的字符
因此,为了获得字符串文字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 的 stripslashes
echo stripslashes('FBU4061\0258');
或者尝试这段代码:
function removeslashes($string)
{
$string=implode("",explode("\\",$string));
return stripslashes(trim($string));
}
$text="FBU4061\0258";
echo removeslashes($text);