我在处理包含德语umlauts的数据库数据时遇到了问题。基本上,每当我收到包含umlauts的数据时,它就是一个带有问号的黑色方块。我通过使用以下代码解决了这个问题:
mysql_query ('SET NAMES utf8')
查询之前。
问题是,一旦我在查询结果上使用json_encode(...)
,包含变音符号的值就会变成null
。通过在浏览器中直接调用php文件,我可以看到这一点。除了在编码为JSON之前替换这些字符并在JS中解码它之外,是否有其他解决方案?
我在处理包含德语umlauts的数据库数据时遇到了问题。基本上,每当我收到包含umlauts的数据时,它就是一个带有问号的黑色方块。我通过使用以下代码解决了这个问题:
mysql_query ('SET NAMES utf8')
查询之前。
问题是,一旦我在查询结果上使用json_encode(...)
,包含变音符号的值就会变成null
。通过在浏览器中直接调用php文件,我可以看到这一点。除了在编码为JSON之前替换这些字符并在JS中解码它之外,是否有其他解决方案?
我知道这可能有点老了,但这里有一个更好的解决方案:
使用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()
将umlauts(德语特殊字符)更改为HTML实体。
以下测试对我有效:
<?php
$test = array( 'bla' => 'äöü' );
$test['bla'] = htmlentities( $test['bla'] );
echo json_encode( $test );
?>
请确保翻译文件本身已明确存储为UTF-8
之后重新加载缓存块和翻译