Symfony2 + Doctrine:如何将iso8859-1转换为utf-8,反之亦然?

房屋

我们正在构建使用Oracle数据库的Symfony2应用程序。数据库中的所有数据均编码为WE8ISO8859P15(iso-8859-1),所有网站均编码为utf-8。

有什么方法可以将从数据库接收的所有数据转换为utf8,并将所有发送到DB的数据转换为iso-8859-1,而不是将网站转换为iso8859-1?也许使用Doctrine事件订阅者?如果是这样,我应该拦截哪些事件?

马泰奥

我用MSSQL实例解决了类似的问题,该实例将utf8转换为latin1,反之亦然。我执行以下步骤:

  1. 定义自定义DBAL类型
  2. 在Boot Bundle方法上初始化(我想您也可以这样做config.yml
  3. 将其用作实体字段上的注释

这是他的代码:

DBAL自定义类型

<?php
namespace Acme\DemoBundle\Doctrine\Type;

use Doctrine\DBAL\Types\StringType;
use Doctrine\DBAL\Platforms\AbstractPlatform;

class Utf8String extends StringType
{
    /**
     * {@inheritdoc}
     */
    public function convertToDatabaseValue($value, AbstractPlatform $p)
    {
        // convert from utf8 to latin1
        return mb_convert_encoding($value, 'ISO-8859-1', 'UTF-8');
    }

    /**
     * {@inheritdoc}
     */
    public function convertToPHPValue($value, AbstractPlatform $p)
    {
        // convert from latin1 to utf8
        return mb_convert_encoding($value, 'UTF-8', 'ISO-8859-1');
    }
}

捆绑初始化

<?php

namespace Acme\DemoBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;
use Doctrine\DBAL\Types\Type;

class AcmeDemoBundle extends Bundle
{
    public function boot() {

        if (!Type::hasType('utf8string'))
        {
            Type::addType('utf8string', 'Acme\DemoBundle\Doctrine\Type\Utf8String');

            $em = $this->container->get('doctrine.orm.em_my_sqlserver_entity_manager');
            $conn = $em->getConnection();
            $conn->getDatabasePlatform()->registerDoctrineTypeMapping('Utf8String', 'utf8string');
        }
    }

}

映射实体示例

<?php

namespace Acme\DemoBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 *
 * @ORM\Table(name="VEHICLE")
 * @ORM\Entity()
 */
class Vehicle
{

    /**
     * @ORM\Id
     * @ORM\Column(name="VEHICLE_NAME", type="utf8string", length=16, nullable=false)
     */
    private $name;


    /**
     * @var integer
     *
     * @ORM\Column(name="ID_VEHICLE", type="integer", nullable=true)
     */
    private $idVehicle;

....
}

希望此帮助并希望您也找到更好的解决方案!!!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将括号从{转换为},反之亦然

来自分类Dev

如何在JavaScript中将两个8位转换为16位,反之亦然?

来自分类Dev

在将double转换为uint8时(反之亦然)使Matlab发出警告?

来自分类Dev

如何将CLOB转换为图像,反之亦然?

来自分类Dev

如何将CLOB转换为图像,反之亦然?

来自分类Dev

如何将整数转换为指针,反之亦然

来自分类Dev

如何将 QPixMap 转换为 QPainterPath,反之亦然?

来自分类Dev

如何将8字符字符串转换为64位bigint,反之亦然?

来自分类Dev

将列表转换为网格视图,反之亦然

来自分类Dev

元函数将类型转换为整数,反之亦然

来自分类Dev

将枚举类型转换为整数,反之亦然

来自分类Dev

将Intent转换为String,反之亦然

来自分类Dev

将char数组转换为等效的整数,反之亦然

来自分类Dev

将int []转换为short [],反之亦然

来自分类Dev

将数据表转换为列表,反之亦然

来自分类Dev

BASH同时将大写转换为小写,反之亦然

来自分类Dev

将向量的索引转换为其内容,反之亦然

来自分类Dev

将当地时间转换为UTC,反之亦然

来自分类Dev

将厘米转换为英尺和英寸,反之亦然?

来自分类Dev

将熊猫数据框转换为字典,反之亦然

来自分类Dev

将网格上的总体转换为坐标,反之亦然

来自分类Dev

将参数变量从int转换为char,反之亦然

来自分类Dev

bash脚本将大写转换为小写,反之亦然

来自分类Dev

将向量的索引转换为其内容,反之亦然

来自分类Dev

C ++ | 将int转换为byte [4],反之亦然

来自分类Dev

ByteBuffer - 将 long 转换为 char 数组,反之亦然

来自分类Dev

将 Eigen::SparseMatrix 转换为 cuSparse,反之亦然

来自分类Dev

将UTF-8转换为ISO-8859-2(抛光)

来自分类Dev

Excel将行名[1,2,3]更改为列名[A,B,C],反之亦然

Related 相关文章

  1. 1

    将括号从{转换为},反之亦然

  2. 2

    如何在JavaScript中将两个8位转换为16位,反之亦然?

  3. 3

    在将double转换为uint8时(反之亦然)使Matlab发出警告?

  4. 4

    如何将CLOB转换为图像,反之亦然?

  5. 5

    如何将CLOB转换为图像,反之亦然?

  6. 6

    如何将整数转换为指针,反之亦然

  7. 7

    如何将 QPixMap 转换为 QPainterPath,反之亦然?

  8. 8

    如何将8字符字符串转换为64位bigint,反之亦然?

  9. 9

    将列表转换为网格视图,反之亦然

  10. 10

    元函数将类型转换为整数,反之亦然

  11. 11

    将枚举类型转换为整数,反之亦然

  12. 12

    将Intent转换为String,反之亦然

  13. 13

    将char数组转换为等效的整数,反之亦然

  14. 14

    将int []转换为short [],反之亦然

  15. 15

    将数据表转换为列表,反之亦然

  16. 16

    BASH同时将大写转换为小写,反之亦然

  17. 17

    将向量的索引转换为其内容,反之亦然

  18. 18

    将当地时间转换为UTC,反之亦然

  19. 19

    将厘米转换为英尺和英寸,反之亦然?

  20. 20

    将熊猫数据框转换为字典,反之亦然

  21. 21

    将网格上的总体转换为坐标,反之亦然

  22. 22

    将参数变量从int转换为char,反之亦然

  23. 23

    bash脚本将大写转换为小写,反之亦然

  24. 24

    将向量的索引转换为其内容,反之亦然

  25. 25

    C ++ | 将int转换为byte [4],反之亦然

  26. 26

    ByteBuffer - 将 long 转换为 char 数组,反之亦然

  27. 27

    将 Eigen::SparseMatrix 转换为 cuSparse,反之亦然

  28. 28

    将UTF-8转换为ISO-8859-2(抛光)

  29. 29

    Excel将行名[1,2,3]更改为列名[A,B,C],反之亦然

热门标签

归档