PHP:如何 json 编码印地语作为响应

PHP: How to json encode of hindi language in response

我正在处理翻译 API 但这是一个问题。我正在使用 JSON 作为回应,当我使用 json_encode 印地语时,输出就像是“\u092f\u0939 \u0915\u093e\u0930 \u0939\u0948”

我的代码如下

$data = array();
$data['hindi'] = 'यह कार है';
$data['english'] = 'This is car';
echo json_encode($data); die;

响应是

{"hindi":"\u092f\u0939 \u0915\u093e\u0930 \u0939\u0948","english":"This is car"}

原因很可能是这些字符不在 UTF-8 中(至少我找不到它们)。 From the PHP documentation on json_encode:

All string data must be UTF-8 encoded.

这意味着它必须将其转换为 'description' 个字符。别担心,如果你再次解码它很可能是正确的。

如果您是 运行 PHP 5.4 或更高版本,请在调用 json_encode

时传递 JSON_UNESCAPED_UNICODE 参数

示例:

$data = array();
$data['hindi'] = 'यह कार है';
$data['english'] = 'This is car';
echo json_encode($data, JSON_UNESCAPED_UNICODE);
die;

这是正确的json,当您在浏览器中显示它和/或解析它时,它会生成一个具有正确键和值的对象:

var json_string = '{"hindi":"\u092f\u0939 \u0915\u093e\u0930 \u0939\u0948","english":"This is car"}',
    json = JSON.parse(json_string);

// or directly:
var json2 = {"hindi":"\u092f\u0939 \u0915\u093e\u0930 \u0939\u0948","english":"This is car"};

console.log(json_string);
console.log(json);
console.log(json2);

document.write(json_string);
document.write('<br>');
document.write(json.hindi);
document.write('<br>');
document.write(json2.hindi);

我有办法解决这个问题。它对我来说很好用。

$data = array();
$data['hindi'] = base64_encode('यह कार है');
$data['english'] = 'This is car';
$encoded_text=json_encode($data);

要检索数据的印地语部分:

$hindi=base64_decode(json_decode($encoded_text)->hindi);