我遇到了来自包含德语变音符号的数据库中的数据的问题。基本上,每当我收到包含变音符号的数据时,它都是一个带有询问标记的黑色方块。我解决了这个问题
mysql_query ('SET NAMES utf8')
在查询之前。
问题是,一旦我json_encode(...)
在查询结果上使用,包含变音符号的值就会得到null
. 我可以通过直接在浏览器中调用 php 文件来看到这一点。除了在编码为 JSON 并在 JS 中解码之前替换此字符之外,还有其他解决方案吗?
我遇到了来自包含德语变音符号的数据库中的数据的问题。基本上,每当我收到包含变音符号的数据时,它都是一个带有询问标记的黑色方块。我解决了这个问题
mysql_query ('SET NAMES utf8')
在查询之前。
问题是,一旦我json_encode(...)
在查询结果上使用,包含变音符号的值就会得到null
. 我可以通过直接在浏览器中调用 php 文件来看到这一点。除了在编码为 JSON 并在 JS 中解码之前替换此字符之外,还有其他解决方案吗?
看看这里提到的这个非常优雅的解决方案:
json_encode( $json_full, JSON_UNESCAPED_UNICODE );
如果问题不在您的代码中的其他任何地方,则应该解决它。
编辑:元音变音问题可能是由多种来源引起的,例如您的 HTML 文档的字符集、数据库格式或您的字符串运行的一些以前的 php 函数(当您遇到元音变音问题时,您绝对应该查看多字节函数)。
这些问题往往很烦人,因为在大多数情况下很难跟踪它们(尽管这不像几年前那么糟糕)。上面的函数修复了 json_encode 的元音变音问题……但问题很可能是由应用程序的不同部分引起的,而不是这个特定的函数。
我知道这可能很旧,但这里有一个更好的解决方案:
使用 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');
希望这可以帮助某人。
您可能只想在浏览器中以某种方式显示文本,因此一种选择是使用htmlentities()
.
以下测试对我有用:
<?php
$test = array( 'bla' => 'äöü' );
$test['bla'] = htmlentities( $test['bla'] );
echo json_encode( $test );
?>
这里唯一重要的一点是 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() 任何字符串。
确保翻译文件本身明确存储为 UTF-8
之后重新加载缓存块和翻译