Utf 8 强制编码&;用条令2解码
我使用的是一个使用Utf 8 强制编码&;用条令2解码,utf-8,character-encoding,doctrine-orm,latin1,Utf 8,Character Encoding,Doctrine Orm,Latin1,我使用的是一个使用latin1数据库但使用utf8字符串的遗留数据库。每次应用程序读取或写入数据库时,都会手动解码或编码,并将utf8编码字符串存储在latin1数据库中 在写作时,它会执行以下操作: $value=utf8_编码(“Iñtërn–tiênálizêtiên”) mysql_查询(“插入表(键)值($value)”) 因此,存储值为IñtërnÃ、tiônÃlizÃtiÃ184; n 阅读时: $result=mysql\u查询(“从表中选择键”) $value=utf8
latin1
数据库但使用utf8
字符串的遗留数据库。每次应用程序读取或写入数据库时,都会手动解码或编码,并将utf8
编码字符串存储在latin1
数据库中
在写作时,它会执行以下操作:
$value=utf8_编码(“Iñtërn–tiênálizêtiên”)
mysql_查询(“插入表(键)值($value)”)
因此,存储值为IñtërnÃ、tiônÃlizÃtiÃ184; n
阅读时:
$result=mysql\u查询(“从表中选择键”)
$value=utf8_decode($result)//再次显示“Iñtërn–tiënálizëtiên”的结果
我如何使用原则2管理同一个数据库,并尊重这种奇怪的行为
以下代码在我的实体中使用时将按预期工作,但我正在寻找一种更干净、干燥的解决方案
public function setKey($value)
{
$this->key = utf8_encode($value);
}
public function getKey()
{
return utf8_decode($this->key);
}
您可以创建自己的自定义“字符串”类型,并在原则\DBAL\Types\type
中重写它的类Type::convertToDatabaseValue
和Type::convertToPHPValue
将是您要覆盖的内容
<?php
use Doctrine\DBAL\Types\StringType;
use Doctrine\DBAL\Platforms\AbstractPlatform;
class Utf8StringType 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
\Doctrine\DBAL\Types\Type::addType('utf8string', 'Utf8StringType');
// replace the default string type
\Doctrine\DBAL\Types\Type::overrideType('string', 'Utf8StringType');