情况是这样的:我在一个基于symfony 3的rest api上工作,它使用FOSRestBundle和symfony序列化器组件,因此方法返回数组,而FOSRest处理编码和响应。问题是序列化程序使用具有默认设置的json_encode,而api为某些符号返回类似“\u00c9S”的数据。因此我需要将“JSON_UNESCAPED_UNICODE”传递给json_encode()不知何故。有没有什么适当的方法来达到这个目标?方法示例:
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use FOS\RestBundle\Controller\Annotations as Rest;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use Symfony\Component\HttpFoundation\Request;
/**
* Class ExampleController
* @package AppBundle\Controller
*/
class ExampleController extends Controller
{
/**
* @Rest\Get("/get-some-data")
* @param Request $request
* @return array
*/
public function getSomeDataAction(Request $request)
{
$someData = [
'prop1' => 'Value',
'prop2' => 'Value',
'prop3' => 'Value',
'prop4' => 'Value',
];
return $someData;
}
因此,当我请求'/get-some-data'时,它会返回:
{"prop1":"Value with \/","prop2":"Value with \u00c9"}
,但我需要它的回报:
{"prop1":"Value with /","prop2":"Value with É"}
6条答案
按热度按时间7gyucuyw1#
我使用Symfony 3和“Doctrine JSON ODM Bundle”将我的数据存储为JSON文档。我遇到了同样的问题。所有包含Unicode字符的数据都会自动转义,这不是我想要的。
经过一些实验,我终于设法将
JSON_UNESCAPED_UNICODE
选项传递给json_encode()
。下面是我的解决方案:v7pvogib2#
Symfony的解决方案5.
自Symfony 4.2起,不赞成将整数作为“Symfony\Component\Serializer\Encoder\JsonEncode::__construct()”方法的第一个参数传递,请改用上下文的“json_encode_options”键。
添加到config/services.yaml:
n53p2ov03#
当设置json类型时,在doctrine for column引擎盖下使用PHP的json_encode()和json_decode()函数来存储和检索数据库中的数据。
json_encode()将PHP数组转换为JSON字符串的函数有第二个参数,用于分配设置一些转换规则的选项集。其中一个参数是JSON_UNESCAPED_UNICODE,它禁止将多字节符号编码为**\uXXXX**
我们可以默认为doctrine启用json_encode()的这个选项。
1.创建类App\学说\类型\JsonType
2.覆盖与我们的类对应的DBAL JSON类型的配置
mxg2im7a4#
您可以使用编码器,如here和文档中所示
编辑:
在这个例子中,我使用了一个Response对象。注意一个Action Controller必须返回一个Response对象。
u0sqgete5#
im9ewurl6#
在较新版本的symfony中,必须使用以下格式: