用于反斜杠的PHP str_replace

Sha*_*lin 5 php

我需要在后面的字符串中用''替换\'.

$x = "FBU4061\0258";
Run Code Online (Sandbox Code Playgroud)

当我做 $x = str_replace('\\', '', $x);

它返回FBU40618,

有没有办法解决FBU40610258问题.

注意:我需要在双引号内执行此操作.在单引号内,它可以毫无问题地返回所需的值.

She*_*rif 5

你在这里可能会让人困惑的是,双引号字符串解释这个字符串与单引号字符串截然不同."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)

看看字符串长度的明显差异!


Ren*_*ann 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