PHP-str_replace不起作用

时间:2018-08-07 07:20:33

标签: php utf-8 str-replace

(对不起,如果我的英语不好,但不是我的语言)

在我的PHP文件中,我收到一个名为$ orderdetalle的对象,该对象是在我无法访问的服务器的一部分中生成的,我不知道服务器的编码 ... $ orderdetalle是一个数组,在string字段中包含不同的值以及它们之间的姓氏。但是,例如,如果姓氏为Hernández,则变量保留Hern\u00e1ndez

为了使姓氏以后可以在json中发送,我正在尝试用str_replace()preg_replace()做我在另一个类似问题中读到的内容:

$lastname_consumer = $ordendetalle['customer_lastname'];//I receive the lastname Hern\u00e1ndez
$str_lastname = str_replace('\u','u',$lastname_consumer);
$lastname = preg_replace('/u([\da-fA-F]{4})/', '&#x\1;', $str_lastname);

$customer = array ( 'customer' => array ( 'id' => $ordendetalle['customerId'], 
                                          'lastname' => $lastname, 
                                          'firstname' => $ordendetalle['firstname'],
                                          'email' => $ordendetalle['email']
                                        )
                  );

$customer_order = print_r(json_encode($customer), true); //Print in a log

我的问题是,$str_lastname在执行Hern\u00e1ndez时获得Hernu00e1ndez而不是str_replace(),而随后执行preg_replace()并获得{{ 1}}。

另一方面,我已经尝试过http://phptester.net/中的代码,并且对我来说效果很好,但是我知道Hernández是字符 UTF-8 的问题。强>。因此,我现在还不太清楚该如何前进。

感谢您的时间!

编辑: 添加\u00e1

var_dump($ordendetalle)

1 个答案:

答案 0 :(得分:1)

问题出在您的$ ordendetalle数组中的每个值已经用json_encode编码的事实     所以你可以这样做:

$ordendetalle=array_map('json_decode',$ordendetalle);
$customer = array ( 'customer' => array ( 'id' => $ordendetalle['customerId'], 
                                          'lastname' => $lastname, 
                                          'firstname' => $ordendetalle['firstname'],
                                          'email' => $ordendetalle['email']
                                        )
                  );

$customer_order = print_r(json_encode($customer), true); //Print in a log