在我的symfony 2应用程序中,我正在从一个yaml文件中转换控制器中的字符串,并通过ajax发送它。
然后在我的ajax函数中,我用JSON解析响应
我遇到的问题是翻译器输出的字符串不是UTF8。为什么?当我调用过滤器时,它的格式正确转换我的模板。
另外,在我的控制器中写的强调字母在UTF8中正确发送,它似乎真的来自翻译组件。
我找到的解决方法是在我的控制器中翻译后以UTF8编码,通过ajax发送,然后在javascript中解码UTF8。但它不是超级清洁加上我可以得到"这不是一个URI"错误。
如何让翻译器在控制器中输出UTF8字符串?
我的yaml:
rights:
is_boss: Tout éditer, voir, supprimer
我的控制器:
$message= strtolower($translator->trans('rights.is_boss', array(), 'backend_pages'));
$response = array(
'message' => utf8_encode($message)
);
return new JsonResponse($this->get('serializer')->serialize($response, 'json'));
我的观点:
$.ajax({
type : 'POST',
url : '{{ path('manage_rights', {'associate' : associate.id }) }}',
data: {right: right, parameter: parameter, value: value},
dataType: 'json'
}).done(function(response){
response = JSON.parse(response);
var message = decodeURIComponent(escape(response.message));
//do stuff
})
如果我不以UTF 8编码,我得到的错误如下:
您的数据无法编码,因为它包含无效的UTF8 字符。 500内部服务器错误 - RuntimeException 在 供应商\ JMS \串行的\ src \ JMS \串行\ JsonSerializationVisitor.php 在第36行 -
精度:
//This does not output a proper UTF8 string. I get an error if I try to serialize it in JSON
$message= strtolower($translator->trans('rights.is_boss', array(), 'backend_pages'));
//In my twig, this does output a correct string with accentuated chars without weird symbols
<label>{{ ('rights.is_boss') | trans }}</label>