我需要用''替换\在以下字符串中。
$x = "FBU4061\0258";
当我做$x = str_replace('\\', '', $x);
返回FBU40618,
是否有任何解决方法可以获取FBU40610258。
注意:我需要在双引号内执行此操作。在单引号内,它可以毫无问题地返回所需的值。
答案 0 :(得分:5)
这里可能让您感到困惑的是,双引号字符串解释此字符串与单引号字符串的区别非常不同。 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}
与正则表达式匹配的字符序列是八进制表示法中的字符
因此,为了获得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"
看看字符串长度的明显差异!
答案 1 :(得分:2)
你最好的机会是做一个mysql替换查询:
更改查询中的值:
SELECT REPLACE('http://yourdomain.com', 'http', 'https');
https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace
您也可以尝试这样做:
UPDATE table
SET field_name = replace(field, 'http, 'https')
https://dba.stackexchange.com/questions/2261/how-do-i-remove-backslashes-from-records-in-mysql
答案 2 :(得分:0)
使用php stripslashes
echo stripslashes('FBU4061\0258');
或尝试此代码: -
function removeslashes($string)
{
$string=implode("",explode("\\",$string));
return stripslashes(trim($string));
}
$text="FBU4061\0258";
echo removeslashes($text);