我从包含德语变音符号的数据库中获取数据时遇到了麻烦。基本上,每当我收到包含变音符号的数据时,它都是带有询问标记的黑色方块。我通过把
解决了这个问题mysql_query ('SET NAMES utf8')
在查询之前。
问题是,只要我对查询结果使用json_encode(...)
,包含变音符号的值就会获得null
。我可以通过直接在浏览器中调用php文件来看到这一点。除了在编码到JSON之前替换这些字符并在JS中解码它之外还有其他解决方案吗?
答案 0 :(得分:18)
答案 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
之后重新加载缓存块和翻译