str_replace,给我错误的结果仅当数字在其中时

时间:2018-11-14 04:11:13

标签: php str-replace

//post data
$post = $_POST['username'];

//str replace
$print = str_replace([1,2,3,4,5], ['4A','6B','7C','2D','6F'], $post);

//prints result
echo "{\"username\":\"" . $print . "\"}";

str替换仅在Alpha时效果很好(例如:TEST!@#test = 7160767124452671607671,这很完美,但是一旦数字起作用,$print应该输入{"username":"4A6B7C2D6F"},如果输入{ {1}}当前输出为12345

2 个答案:

答案 0 :(得分:1)

str_replace从头开始进行每次替换扫描,并将替换先前替换的部分内容。而是使用strtr,不会。

  

最长的键将首先尝试。替换子字符串后,将不再搜索其新值。

例如:

echo strtr("12345", [
    1 => '4A',
    2 => '6B',
    3 => '7C',
    4 => '2D',
    5 => '6F'
]);

会给您:

4A6B7C2D6F

答案 1 :(得分:0)

欢迎使用StackOverflow!

我在PHP.net官方文档中找到了有关您的问题的一些信息。

  

警告

     

替换订单陷阱

     

由于str_replace()从左到右替换,它可能替换了   进行多次替换时先前插入的值。也可以看看   本文档中的示例。

在您的情况下,首先将1替换为4A,然后将4中的4A替换为2D,结果是2DA和之后,它似乎可以正确替换所有内容。

编码愉快!

编辑:按照Paul的回答所示使用strtr,将为您提供所需的结果。