gpt4 book ai didi

php - Symfony2+学说 : How to convert iso8859-1 to utf-8 and viceversa?

转载 作者:可可西里 更新时间:2023-11-01 01:00:26 26 4
gpt4 key购买 nike

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

有没有办法把从数据库接收到的数据全部转成utf8,把发到DB的数据全部转成iso-8859-1,而不是把网站转成iso8859-1?也许使用 Doctrine 事件订阅者?如果是这样,我应该拦截哪些事件?

最佳答案

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

  1. 定义自定义 DBAL 类型
  2. 在启动 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');
}
}

bundle 初始化

<?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;

....
}

希望这对您有所帮助,也希望您能找到更好的解决方案!!!

关于php - Symfony2+学说 : How to convert iso8859-1 to utf-8 and viceversa?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28855399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com