Laravel:不能设置JSON utf-8字符集

时间:2014-06-21 11:46:13

标签: php json laravel-4

我在Laravel中遇到了一个具体问题。

当我使用echoprint_rvar_dump时,我的数据(从雄辩中检索)以正确的格式打印(UTF-8,希腊语)。但是当我使用

return Response::json($data)

返回类似

的内容
"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03bf\u03af \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b5\u03c2"

我已在我的php.inimysql.conf中将UTF-8设置为默认字符集(但这不是问题)。

我尝试了几种设置字符集的方法:

Response::json($data,200,$headers)

其中$ headers是一个数组:

'Content-type'=> 'application/json; charset=utf-8'

但没有任何改变。

我的操作系统是Debian 7 wheezy 64bit,PHP版本5.5.13,MySQL 5.6.19和apache2服务器。

2 个答案:

答案 0 :(得分:2)

在Laravel 4.1中,您可以将json_encode()选项指定为以下方法的第4个参数。您需要传递JSON_UNESCAPED_UNICODE选项以转义utf-8文本

Response::json($data, 200, $headers, JSON_UNESCAPED_UNICODE);

此功能会在调用json_encode()

时传递选项

http://php.net/manual/en/function.json-encode.php

答案 1 :(得分:1)

如果没有像我这样的正确标题设置,

JSON_UNESCAPED_UNICODE无效:

return Response::json($data, 200, array('Content-Type' => 'application/json;charset=utf8'), JSON_UNESCAPED_UNICODE);

标题Content-Type设置为application/json;charset=utf8后,它对我无效。

适用于当前的Laravel版本。 (5.4)