(对不起,如果我的英语不好,但不是我的语言)
在我的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)
答案 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