15

我遇到了来自包含德语变音符号的数据库中的数据的问题。基本上,每当我收到包含变音符号的数据时,它都是一个带有询问标记的黑色方块。我解决了这个问题

mysql_query ('SET NAMES utf8')

在查询之前。

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

4

5 回答 5

36

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

json_encode( $json_full, JSON_UNESCAPED_UNICODE );

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

编辑:元音变音问题可能是由多种来源引起的,例如您的 HTML 文档的字符集、数据库格式或您的字符串运行的一些以前的 php 函数(当您遇到元音变音问题时,您绝对应该查看多字节函数)。

这些问题往往很烦人,因为在大多数情况下很难跟踪它们(尽管这不像几年前那么糟糕)。上面的函数修复了 json_encode 的元音变音问题……但问题很可能是由应用程序的不同部分引起的,而不是这个特定的函数。

于 2017-05-30T13:37:22.063 回答
14

我知道这可能很旧,但这里有一个更好的解决方案:

使用 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');

希望这可以帮助某人。

于 2013-05-27T06:18:29.007 回答
6

您可能只想在浏览器中以某种方式显示文本,因此一种选择是使用htmlentities().

以下测试对我有用:

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

    echo json_encode( $test );
?>
于 2012-11-28T09:52:32.453 回答
4

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

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

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

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

于 2013-12-04T10:34:23.553 回答
0

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

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

于 2015-08-26T12:19:40.140 回答