学说2:从MySQL表中获取奇怪的字符

zii*_*web 6 mysql pdo doctrine

我试图显示这样的文字:

1ºA
Run Code Online (Sandbox Code Playgroud)

存储在MySQL表('级别')中.

在使用以下代码查询表'level'之后:

/**
 * @Route("/list-level", name="list_level")
 */
public function listAction(Request $request)
{
    $em = $this->getDoctrine()->getEntityManager();

    $levels = $em->getRepository('AppBundle:Level')->findAll();
    var_dump($levels[0]->getName());
    die("fasf");
Run Code Online (Sandbox Code Playgroud)

这个var_dump()回报:

在此输入图像描述

我使用Symfony,因此与数据库连接相关的信息缓存在文件中var/cache/prod/appProdProjectContainer.所以我打开它来检查charset参数的值,我发现了这个:

protected function getDoctrine_Dbal_DefaultConnectionService()
{
    $a = new \Symfony\Bridge\Doctrine\ContainerAwareEventManager($this);
    $a->addEventListener(array(0 => 'loadClassMetadata'), ${($_ = isset($this->services['doctrine.orm.default_listeners.attach_entity_listeners']) ? $this->services['doctrine.orm.default_listeners.attach_entity_listeners'] : $this->get('doctrine.orm.default_listeners.attach_entity_listeners')) && false ?: '_'});

    return $this->services['doctrine.dbal.default_connection'] = ${($_ = isset($this->services['doctrine.dbal.connection_factory']) ? $this->services['doctrine.dbal.connection_factory'] : $this->get('doctrine.dbal.connection_factory')) && false ?: '_'}->createConnection(array('driver' => 'pdo_mysql', 'host' => 'localhost', 'port' => NULL, 'dbname' => 'my_javiergarpe1979', 'user' => 'javiergarpe1979', 'password' => '*******', 'charset' => 'UTF8', 'driverOptions' => array(), 'defaultTableOptions' => array()), new \Doctrine\DBAL\Configuration(), $a, array());
}
Run Code Online (Sandbox Code Playgroud)

正如你在该函数上看到的那样,写道:'charset' => 'UTF8'所以.. 为什么我没有得到正确的字符?

Jen*_*nsV 1

有多个地方可能会出错。

\n\n
    \n
  1. 检查您在数据库上使用的字符集。还要检查表,因为它们可以有自己的编码。
    \n有关更多详细信息,请参阅此答案:https ://stackoverflow.com/a/202246/2232127
  2. \n
  3. 检查您用于连接的字符集(您已经设置过)
  4. \n
  5. 检查页面显示的字符集。您可以通过 this 元标记来设置它<meta charset="UTF-8"><head>
  6. \n
  7. 您必须使用支持该字符的字体。大多数字体不应显示该<?>字符,而可能显示类似于\xc2\xb0与本例类似的内容。
  8. \n
\n