如何在PHP中使用json_encode()函数处理瑞典字母?

3

我有一个像这样的数组,需要进行json编码:

    $regularArray = array(      
        array( "label" => "Hello World", "value" => 1 ),
        array( "label" => "Hej Världen", "value" => 2 )
    );

    $jsonArray = json_encode( $regularArray );

("Hej världen" 在瑞典语中表示你好世界) 但是当我打印 $jsonArray 时,我得到了这个结果:

[{"label":"Hello World","value":1},{"label":null,"value":2}]

为什么数组中第二个项目的标签是null?我知道这与单词“Världen”有关,因为它包含一个非标准字母。我该如何解决这个问题?


无法复现。当我运行该代码时,我得到 [{"label":"Hello World","value":1},{"label":"Hej V\u00e4rlden","value":2}] - Quentin
@Quentin 是的。就像下面一些人说的那样,我把我的文件编码改成了UTF8。然后我得到了和你一样的结果。但问题仍然存在。我该怎么解决它? - Weblurk
为什么这是个问题?\u00e4是代表ä的JSON格式。 - Quentin
@Quentin 因为我不想使用 preg_replace() 来使字符正常打印。 - Weblurk
JSON是一种结构化数据格式。你似乎正在尝试将其用作显示格式。不要这样做,它不是为此设计的。 - Quentin
你好,这里有一个带有另一种 PHP 解决方案的问题,https://dev59.com/Uk_Sa4cB1Zd3GeqP9iFX#39364497。 - Valter Ekholm
2个回答

3

json_encode函数仅适用于UTF-8编码的数据。您可以将输入数组数据更改为UTF-8。

使用utf8_encode对输入数组数据进行编码,并在需要数据时使用utf8_decode进行解码。

<?php
   $regularArray = array(      
        array( "label" => "Hello World", "value" => 1 ),
        array( "label" => "Hej Världen", "value" => 2 )
    );
    $regularArray[1]['label'] = utf8_encode( $regularArray[1]['label']);
    echo $jsonArray = json_encode( $regularArray );
    $data = json_decode($jsonArray, true);
    $data[1]['label'] = utf8_decode($data[1]['label']);
    print_r($data);

?>

输出:-

[{"label":"Hello World","value":1},{"label":"Hej V\u00c3\u00a4rlden","value":2}]
Array
(
    [0] => Array
        (
            [label] => Hello World
            [value] => 1
        )

    [1] => Array
        (
            [label] => Hej Världen
            [value] => 2
        )

)

我制作了一个测试页面,它运行良好。


2

json_encode需要输入为 utf-8 格式。请将您的文件保存为 utf-8 格式。


好的。但是它印出的是"Hej Världen"而不是"你好,世界"。 - Weblurk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接