将编码的字符转换回原始字符 - PHP

时间:2013-04-17 21:27:21

标签: php json encoding utf-8 special-characters

我的数据库使用特殊字符返回以下JSON。我需要将其转换回原始字符:

{   "event_id":"5153",
      "name":"Event Test",
      "description":"Persönlichkeit Universität"",
      "start_time":"2013-04-24 9:00 AM EST",
        "end_time":"2013-04-24 5:00 PM EST"  
}

我想删除所有HTML字符。并将&ouml之类的所有字符转换为原始字符。所以上面JSON中的description实际上应该是这样的

  

PersönlichkeitUniversität“

在将数组编码为JSON之前,我在数组上执行array_walk,并在每个元素上执行strip_tags。 这可以。 (这导致了上面的JSON。)。

为了让这些人回来,我试过了:

  1. encoding again with utf8_encode
  2. htmlspecialchars_decode
  3. html_entity_decode  //This one is eliminating the character altogether.

但没有任何东西给原来的字母回复。

有什么想法吗?

更新

我试过这个。但现在说明字段返回null

    array_walk_recursive($results, function (&$val) {
    $val = strip_tags(html_entity_decode($val));
});

$results = json_encode( $results);

2 个答案:

答案 0 :(得分:1)

html_entity_decode应该做到这一点。我认为你的问题在别的地方。请记住,json_encode仅接受UTF-8字符。所以你可能需要utf8_encode你的字符串。

答案 1 :(得分:1)

我在寻找一些东西时谈到这个话题。 3年后,这个问题仍然没有答案。

json_encode接受选项作为第二个参数。如果您使用如下,特殊字符将显示为原始。

json_encode($data, JSON_UNESCAPED_UNICODE)