php json_encode中德语变音符号的问题

时间:2012-11-28 09:43:09

标签: php json character-encoding

我从包含德语变音符号的数据库中获取数据时遇到了麻烦。基本上,每当我收到包含变音符号的数据时,它都是带有询问标记的黑色方块。我通过把

解决了这个问题
mysql_query ('SET NAMES utf8')

在查询之前。

问题是,只要我对查询结果使用json_encode(...),包含变音符号的值就会获得null。我可以通过直接在浏览器中调用php文件来看到这一点。除了在编码到JSON之前替换这些字符并在JS中解码它之外还有其他解决方案吗?

5 个答案:

答案 0 :(得分:18)

查看提到here的这个非常优雅的解决方案:

json_encode($json_full, JSON_UNESCAPED_UNICODE);

如果问题不在代码中的任何其他地方,则应该修复它。

答案 1 :(得分:12)

我知道这可能已经过时但这是一个更好的解决方案:

使用utf-8字符集定义文档类型:

<?php header('Content-Type: application/json; charset=utf-8'); ?>

确保所有内容都是utf_encoded。 JSON仅适用于utf-8!

function encode_items(&$item, $key)
{
    $item = utf8_encode($item);
}
array_walk_recursive($rows, 'encode_items');

希望这有助于某人。

答案 2 :(得分:6)

您可能只想在浏览器中以某种方式显示文本,因此可以选择使用htmlentities()将变音符号更改为HTML实体。

以下测试对我有用:

<?php
    $test = array( 'bla' => 'äöü' );
    $test['bla'] = htmlentities( $test['bla'] );

    echo json_encode( $test );
?>

答案 3 :(得分:3)

这里唯一重要的一点是json_encode()仅支持UTF-8编码。 http://www.php.net/manual/en/function.json-encode.php

  

所有字符串数据必须采用UTF-8编码。

因此,当非utf-8字符串中有任何特殊字符时,json_encode将返回null值。

因此,要么将整个项目切换为utf-8,要么在使用json_encode()之前确保utf8_encode()任何字符串。

答案 4 :(得分:0)

确保翻译文件本身明确存储为UTF-8

之后重新加载缓存块和翻译