我正在开发一个使用 Symfony 和 MySQL 作为数据库的网络应用程序。我的数据库创建语法如下:
CREATE DATABASE `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
我需要知道为什么会返回意外文本的表是:
CREATE TABLE `elements` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) COLLATE utf8_unicode_ci NOT NULL
)ENGINE=InnoDB AUTO_INCREMENT=132 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
而PHP中的实体代码是:
/**
*
*
* @ORM\Table(name="elements")
* @ORM\Entity()
*/
class Element
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=100)
*/
private $name;
}
当元素的名称包含西类牙语字符,如 á,é,í,ó,ú,ñ;在浏览器中正确呈现,并且在数据库中字符以这种方式存储,但是当我尝试使用 JsonResponse 返回此信息时,字符被转换为其他代码。例如:
$result['id'] = $e->getId();
$result['name'] = $e->getName();
return new JsonResponse( array('response' => $result) );
响应显示:
"response":{
"id":26,
"name":"Avi\u00f3n"
}
名称应该改为“Avión”。
我想知道为什么会发生这种情况以及如何避免这种行为。 有什么想法吗?
提前致谢。
最佳答案
我在这里没有看到实际问题。
它们未 转换为其他代码
。
相反,它们是 utf-8 编码(默认 JSON 编码)。
一些信息:RFC4627 2.5节字符串
\u00F3 是utf-8编码的字符ó
,见here
更新:
关于mysql - Symfony2 - 在 json 响应中从我的数据库 MySQL 更改字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23656471/