【问题标题】:problems with german umlauts in php json_encodephp json_encode 中德语变音符号的问题
【发布时间】:2012-11-16 03:03:10
【问题描述】:

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

mysql_query ('SET NAMES utf8')

在查询之前。

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

【问题讨论】:

    标签: php json character-encoding


    【解决方案1】:

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

    json_encode( $json_full, JSON_UNESCAPED_UNICODE );
    

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

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

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

    【讨论】:

    • 这应该是正确的答案。节省了很多时间,谢谢
    • 虽然接受的答案有很多问题,但这个答案对我有用。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案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】:

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

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

        希望这对某人有所帮助。

        【讨论】:

          【解决方案5】:

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

          以下测试对我有用:

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

          【讨论】:

            猜你喜欢
            • 2014-06-16
            • 1970-01-01
            • 2021-07-08
            • 1970-01-01
            • 2020-12-08
            • 1970-01-01
            • 2020-12-04
            • 1970-01-01
            • 2021-09-28
            相关资源
            最近更新 更多