PHP-\u00f8(ø;)变成u00f8

PHP-\u00f8(ø;)变成u00f8,php,mysql,wordpress,utf-8,Php,Mysql,Wordpress,Utf 8,我正在编写一个可湿性粉剂插件,连接到另一个可湿性粉剂网站,并获得一些数据作为回报(一些令人敬畏的条目,带有名称和其他东西) 一切都很好,我的插件基本上按照预期工作——但我今天注意到它有一些奇怪的编码问题——我住在一个北欧国家,soæl的名字很常见 我已经调试了两个小时了,但似乎无法找出问题所在 **Data path:** End-point -> Plugin - \00f8 Data received - \u00f8 Data saved

我正在编写一个可湿性粉剂插件,连接到另一个可湿性粉剂网站,并获得一些数据作为回报(一些令人敬畏的条目,带有名称和其他东西)

一切都很好,我的插件基本上按照预期工作——但我今天注意到它有一些奇怪的编码问题——我住在一个北欧国家,soæl的名字很常见

我已经调试了两个小时了,但似乎无法找出问题所在

**Data path:**
  End-point     -> Plugin - \00f8
  Data received           - \u00f8
  Data saved              - u00f8
我用以下代码接收数据:

$aDataRecevied = json_decode(oaal_CallEndpointAPI('GET',   'xxxxxx.dedi2491.your-server.de/wp-json/oaeu/v1/api', $aDataSend));
$sFrmEntriesRecevied = $aDataRecevied->sData->aFrmEntries;
然后我找到我的自定义WP帖子,并将其保存为添加/更新到帖子中,方法是:

update_post_meta($iPost_ID, "aFrmEntries", json_encode($aFrmEntries), "");
数据库正在运行:InnoDB&utf8mb4_unicode_ci,但我很有信心这不会成为问题(?)

我不确定这到底是怎么回事,但我希望有人能想出办法

插件从端点获取的字符串如下所示:

{"64":"H\u00f8jb","65":"Hansen","66":"asd@hotmail.com","date_created":"2016-11-21 13:11:26","form_id":"6"}
编辑


显然,当我将数据保存到DB时,\被WP删除了,所以我找到了它!问题是WP会逃逸\u00f8,以使其更安全-遗憾的是,这会产生副作用,即\u00f8将变成u00f8

我只需确保在保存数据之前,我使用以下方法将其转换为èå即可解决此问题:

$str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
    return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}, $str);

幸好:

所以我想出来了!问题是WP会逃逸\u00f8,以使其更安全-遗憾的是,这会产生副作用,即\u00f8将变成u00f8

我只需确保在保存数据之前,我使用以下方法将其转换为èå即可解决此问题:

$str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
    return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}, $str);

值得称赞的是:

你的斜杠是错误的。您需要
\u00f8
。为了帮助您,我们需要发送
\u00f8
的特定代码,否则我们是盲的。我已附加(编辑)了我的原始帖子,以及从端点返回的字符串,足以证明问题不是端点本身,因为它实际上返回了正确的字符串:),所以斜杠的方式是错误的。您需要
\u00f8
。为了帮助您,我们需要发送
\u00f8
的特定代码,否则我们是盲的。我已附加(编辑)了我的原始帖子,以及从端点返回的字符串,足以证明问题不是端点本身,因为它实际上返回了正确的字符串:)
json\u encode(…,json\u UNESCAPED\u UNICODE)
也可以代替此解决方法。
json\u encode(…,json\u UNESCAPED\u UNICODE)
也可以代替此解决方法。