【问题标题】:PHP - \u00f8 (ø) becomes u00f8PHP - \u00f8 (ø) 变成 u00f8
【发布时间】:2017-04-13 05:13:19
【问题描述】:

我正在编写一个连接到另一个 WP 站点的 WP 插件,并获得一些数据作为回报(一些强大的条目,带有名称和其他内容)。

一切都很好,我的插件基本上可以正常工作 - 但我今天注意到它有一些奇怪的编码问题 - 我住在北欧国家,所以 ø æ l 在名称中很常见。

过去 2 小时我一直在调试,但似乎无法找出问题所在。

**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"}

编辑

当我将数据保存到数据库时,WP 显然删除了 \

【问题讨论】:

  • 你的斜线是错误的方式。你想要\u00f8
  • 为了帮助您,我们需要发送\u00f8 的特定代码,否则我们就是瞎子。
  • 我已经附加(编辑)我的原始帖子,从终点返回的字符串,应该足以证明问题不是终点本身,因为它实际上返回了正确的字符串:)

标签: php mysql wordpress utf-8


【解决方案1】:

所以我想通了!问题是 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);

感谢:https://stackoverflow.com/a/2934602/7166130

【讨论】:

  • json_encode(..., JSON_UNESCAPED_UNICODE) 也应该这样做,而不是这种解决方法。
猜你喜欢
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
相关资源
最近更新 更多