我需要在后面的字符串中用''替换\'.
$x = "FBU4061\0258";
Run Code Online (Sandbox Code Playgroud)
当我做 $x = str_replace('\\', '', $x);
它返回FBU40618,
有没有办法解决FBU40610258问题.
注意:我需要在双引号内执行此操作.在单引号内,它可以毫无问题地返回所需的值.
你在这里可能会让人困惑的是,双引号字符串解释这个字符串与单引号字符串截然不同."FBU4061\0258"PHP中的字符串会将字符串的\02一部分解释为STX(或文本开头)字符(即ASCII字符02).
只需尝试var_dump("FBU4061\0258");在PHP中运行代码,并亲自查看输出是如何不是您所期望的.您甚至可以var_dump(bin2hex("FBU4061\0258"));查看字符串的十六进制表示以进一步说明......
var_dump(bin2hex('\02'));
// string(6) "5c3032"
var_dump(bin2hex("\02"));
// string(2) "02"
Run Code Online (Sandbox Code Playgroud)
看到不同?
\[0-7]{1,3}与正则表达式匹配的字符序列是八进制表示法中的字符
因此,为了获得字符串文字,FBU4061\0258必须转义双引号字符串中的反斜杠.
$x = "FBU4061\\0258";
$x = str_replace('\\', '', $x);
var_dump($x); //string(11) "FBU40610258"
Run Code Online (Sandbox Code Playgroud)
请注意,这是因为您在代码中放置了一个字符串文字.但是,如果从数据库中检索到此字符串,则不会进行此插值,因为它已经是字符串文字.
var_dump("FBU4061\\0258"); // string(12) "FBU4061\0258"
var_dump("FBU4061\0258"); // string(9) "FBU40618"
Run Code Online (Sandbox Code Playgroud)
看看字符串长度的明显差异!
你最好的机会是执行 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