如何从php发送非英语字符json?

时间:2017-03-28 11:26:56

标签: php json slim

我有一个非英语单词,例如'परीक्षण'在database.I从slim框架(Php)中获取数据,代码是:

        while($row=$result->fetch_assoc()){
         $data[]=$row;
        }
         return $response->withStatus(200)
        ->withHeader('Content-Type', 'application/json')
        ->write(json_encode($data));

响应是例如

          [{"s.n":"1","english_word":"test","nepali_word":"???????"}]

有人可以告诉我如何从php发送Json中的非英语单词?

3 个答案:

答案 0 :(得分:3)

您可能想要使用JSON_UNESCAPED_UNICODE常量

$arr = ['s.n' => 1, 'english_word' => 'test', 'nepali_word' => 'परीक्षण'];

echo json_encode($arr, JSON_UNESCAPED_UNICODE);

// Output : {"s.n":1,"english_word":"test","nepali_word":"परीक्षण"}

现场演示:https://3v4l.org/DVejS

在您的问题上下文中,当使用Content-Type: application/json这样的标题时,您还需要设置字符集,如下所示:

->withHeader('Content-Type', 'application/json;charset=utf-8;')

答案 1 :(得分:0)

使用以下代码:

while($row=$result->fetch_assoc()){
        $data[]=$row;
}
return $response->withStatus(200)
    ->withHeader('Content-Type', 'application/json')
    ->write(json_encode(mb_convert_encoding($data, "HTML-ENTITIES", "UTF-8")));

答案 2 :(得分:-1)

在这些情况下有几种可能性:

可能性-1:您的数据库列编码可能不支持字符(检查列的编码并使用utf8mb4 for mysql)。在这种情况下,当您插入不支持的字符如“ع”时,数据库会将其转换为真实的实际问号“?” 。 你永远失去了角色,你仍会看到问号???无论你做什么

可能性-2:您的数据库正在使用正确的编码,并且您的字符已正确存储在数据库中,但您仍然会看到问号“?????” 。在这种情况下,显示字符的程序(文本编辑器,Web浏览器等)使用了错误的编码。

现在该怎么办?

1-检查数据库列编码以查看它是否支持utf-8。()

2-检查你使用字符throw的任何程序的编码(浏览器,文本编辑器,Mysql工作台,等等)