如何从 php 发送 json 中的非英文字符?

How to send non english character in json from php?

我有一个非英文单词,例如 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 中的非英语单词吗?

使用以下代码:

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")));

您可能想要使用 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 这样使用 headers 时,您也需要按如下方式设置字符集:

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

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

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

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

现在怎么办?

1- 检查您的数据库列编码是否支持 utf-8.()

2- 检查您正在使用的字符抛出的任何程序的编码(浏览器、文本编辑器、Mysql workbench、..等)