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

Val*_* Ru 15 php json character-encoding

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

mysql_query ('SET NAMES utf8')
Run Code Online (Sandbox Code Playgroud)

在查询之前.

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

GDY*_*GDY 22

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

json_encode($json_full, JSON_UNESCAPED_UNICODE);
Run Code Online (Sandbox Code Playgroud)

如果问题不在您的代码中的任何其他位置,则应该修复它.


mff*_*fap 13

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

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

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

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

function encode_items(&$item, $key)
{
    $item = utf8_encode($item);
}
array_walk_recursive($rows, 'encode_items');
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人.


Sir*_*rko 6

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

以下测试对我有用:

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

    echo json_encode( $test );
?>
Run Code Online (Sandbox Code Playgroud)


Tar*_*sis 5

这里唯一重要的一点是 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() 编码。