用于反斜杠的PHP str_replace

时间:2015-11-09 05:00:50

标签: php

我需要用''替换\在以下字符串中。

$x = "FBU4061\0258";

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

返回FBU40618,

是否有任何解决方法可以获取FBU40610258。

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

3 个答案:

答案 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);

Stripslashes more details