反斜杠的 PHP str_replace

标签 php

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

$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/

相关文章:

php - 使用 PHP 进行博览会推送通知

php - 从数据库 laravel 中显示喜欢的产品

javascript - 在 asp.net c# 中运行时添加多个 js 文件

php - 你必须在使用它之前初始化一个php数组吗?

php - yii 模型-> 保存不适用于更新值

php - 无法使用 php 更新 mysql 表

php - 从表格中抓取行,然后抓取单元格

javascript - 如何获取此动态表中最后两列的列总和

php - 如何在php中使用class(oops)在php中创建mysql表?

php - Vue 组件不在基本 php 中呈现