Symfony UTF-8字符显示不正确

sf6xfgos  于 2022-12-19  发布在  其他
关注(0)|答案(3)|浏览(141)

我有一个问题,我已经花了几个小时:Symfony不能正确显示UTF-8字符串。

数据库

我的数据库有UTF-8(ssh使用UTF-8工具):

db2 "select name from client";

NAME
------------------------------------------------------------------------------------------------------------------------------------------------------
DefaultÄÜÖäüö

简单的GUI:

使用一些转储我得到这个:

dump(mb_detect_encoding($entities[0]->getName()));

“UTF-8编码格式”

dump($entities[0]->getName());

B“违约”

B很奇怪
在细枝中:

违约
当我使用

ISO: {{ entity.name| convert_encoding('UTF-8', 'ISO-8859-1')

默认
元标记已设置

<meta charset="UTF-8" />

我曾尝试在AppKernel.php中更改它(设置代码或注解掉都无所谓)

public function getCharset()
    {
        return 'UTF-8';
    }

同样在数据库的config.yml中(设置代码或注解掉代码并不重要):

doctrine:
    dbal:
        charset:  UTF8

有什么解决办法吗?

a1o7rhls

a1o7rhls1#

尝试在composer.json上添加"symfony/polyfill-iconv": "^1.3"

oxiaedzo

oxiaedzo2#

您是否将此添加到my.cnfserver.cnf文件中:

[mysqld]
# Version 5.5.3 introduced "utf8mb4", which is recommended
collation-server     = utf8mb4_general_ci # Replaces utf8_general_ci
character-set-server = utf8mb4            # Replaces utf8

我猜你用的是MySQL。
也可以在config.yml文件中设置。请参阅文档的"Setting up the database to be UTF8"部分。

dhxwm5r4

dhxwm5r43#

更好的方法是将字符串存储为编码的unicode,并在访问时对其进行解码,如下所示:

<?php

declare(strict_types=1);

namespace App\Model;

use Doctrine\ORM\Mapping as ORM;

/**
 * @final
 */
trait DescriptionTrait
{
    /**
     * @var string|null
     *
     * @ORM\Column(type="text", nullable=true)
     */
    protected $description;

    /**
     * @return string|null
     */
    public function getDescription(): ?string
    {
        return \utf8_decode($this->description);
    }

    /**
     * @param string|null $description
     *
     * @return self
     */
    public function setDescription(?string $description): self
    {
        $this->description = \utf8_encode($description);
        return $this;
    }
}

相关问题