草庐IT

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

coder 2024-05-03 原文

我们正在构建一个使用 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/

有关php - Symfony2+学说 : How to convert iso8859-1 to utf-8 and viceversa?的更多相关文章

  1. javascript - 将变量从 Symfony2 PHP 文件发送到 js 文件 - 2

    我真的是JavaScript的新手,我无法找到关于这方面的一些教程。如果有,请告诉我阅读它们。我想做的是将变量从我的PHPController传递到.js文件-我想填充Highcharts变量。我知道我可以发送响应,但我还需要加载一个模板。这是模板:...{%blockbody%}Months//ThisistheChart:{%blockjavascript%}{%endblock%}{%endblock%}.js文件名为month.js$(function(){$('#container').highcharts({chart:{type:'bar'},title:{text:'B

  2. javascript - Ajax 中的 Symfony2 表单验证 - 2

    在某些页面上,我在引导模式中使用表单。我使用Ajax提交表单,它在Controller中得到验证。大多数用户会正确填写表单,但如果验证失败,表单将重新呈现并发送回给用户。我一点也不喜欢这样,但我找不到更好的方法,因为我无法访问字段的验证错误。有人有更好的方法来实现以JSON发送回验证错误吗? 最佳答案 我自己创建了一个函数publicfunctiongetFormErrors(Form$form){$errors=$form->getErrors();foreach($form->all()as$child){foreach($ch

  3. javascript - 如何使用 Symfony2 将 JavaScript 文件包含到 twig 模板中 - 2

    我可以像这样轻松地将CSS文件包含到我的twig模板中:{%blockstylesheets%}{%endblock%}但是对于我的JavaScript文件{%blockjavascripts%}{%endblock%}该方法不起作用。我也尝试过使用assetics,但这也没有用。 最佳答案 我推荐Assetic方法。这并不简单,但它会给您带来巨大的好处。首先,将您的JS嵌入到这样的模板中:{%blockmy_javascripts%}{%javascripts'@FooBarBundle/Resources/public/js/f

  4. javascript - Symfony2 - Sonata Admin - 在字段前添加 javascript - 2

    在管理类中:protectedfunctionconfigureFormFields(FormMapper$formMapper){$formMapper->add('name','text')->add('description','text');}我不知道如何在“名称”之前添加javascript,你能帮我吗? 最佳答案 为我工作:在管理类src\PP\TestBundle\TestAdmin.phppublicfunctionconfigure(){$this->setTemplate('edit','PPTestBundle

  5. javascript - 一般与 backbone.js 或 javascript 共享 Symfony2 验证规则? - 2

    是否可以公开Symfony2验证规则(对于给定的实体)?我找不到这样的东西。我正在尝试使用DRY方法进行客户端验证(使用backbone.js)。bundle或任何小费之类的东西会有所帮助。Hereis组件验证器。一种可能性是:使用Symfony2标准方式定义服务器端验证规则。示例(YAML,取自他们的网站):#src/Acme/BlogBundle/Resources/config/validation.ymlAcme\BlogBundle\Entity\Author:properties:name:-NotBlank:~使/author/rules返回一个JSON对象,该对象将字段

  6. xml - 使用 SimpleXmlElement 和 symfony2 输出 xml 文件 - 2

    $rootNode=new\SimpleXMLElement("");$itemNode=$rootNode->addChild('item');$itemNode->addChild('itemCode','mk');$itemNode->addChild('itemName','orange');$itemNode=$rootNode->addChild('item');$itemNode->addChild('itemCode','ap');$itemNode->addChild('itemName','apple');$itemNode=$rootNode->addChild(

  7. php - 在 Symfony2 中反序列化或解析 XML 响应 - 2

    我正在通过cURL调用一个API方法,我得到了这个响应:75080000002s5siAAAqueryUser00580000008ReolAAC2015-06-23T13:03:01.000Z2015-06-23T13:03:01.000ZOpenParallelCSV000000034.00000我想以一种简单的方式访问|解析结果,但我不知道是应该反序列化XML还是尝试使用一些PHP原生XML函数来读取它。那么关于这个第一个疑问的想法?如果反序列化XML更好,那么我已经阅读了thispost“在Symfony2中使用JMSSerializerBundle反序列化XML”如果我需要一

  8. php - Symfony2 向外部 API 发送 POST 请求并解析其 XML 响应? - 2

    如何向外部API发送POST请求并解析其XML响应?通常只使用php和xml我会做somethinglike。但是我不确定如何使用Symfony来做同样的事情。另请注意,xml文件中的内容是动态的,如“Itemnumber”、“quantity”等更多信息:我正在尝试将xml数据发送到我们的第三方客户端系统(他们只使用XML,因此没有JSON响应)并解析此XML响应并将其显示给我们的客户。因为客户请求是动态的,所以.xml文件中的内容每次都会更改。所以我需要弄清楚加载此动态.xml文件。使用POST建立连接。读取我从客户那里收到的ParseXml数据(这很容易完成)。

  9. xml - Symfony2 - 为什么使用 XML 进行设置/配置? - 2

    对于这些类型的文件中的每一种,是否有兴趣使用XML而不是YAML:配置安全路由服务翻译我想在全局范围内询问XMLvsYAML和JSON,但我会坚持这些主题:) 最佳答案 在我公司的项目中,我们针对上述每一点使用YAML,因为它更具可读性。最易读。最易读。编辑:我能想象的唯一抽象情况是使用XML而不是YAML-可能是针对一些动态文件编写器,因为使用操作节点更容易SimpleXML或类似的东西。例如,如果您需要定义一些配置文件、在测试中构建模式等...但很难想象另一种情况。另一个编辑:既然我的回答被接受了,我不能不同意m2mdas-正如

  10. php - Symfony2.0.15 Doctrine-Fixtures Windows 命令行 fatal error - 2

    最近开始玩S2,很棒的东西!前段时间开始了在线Symfony2Blogtutorial,但是我被困在了DoctrineDataFixturesgeneration的页面上,这是我在控制台中执行phpapp/consoledoctrine:fixtures:load时收到的消息:Fatalerror:Class'Doctrine\Bundle\DoctrineBundle\Command\DoctrineCommand'notfoundinC:\xampp\htdocs\blog-sf2\vendor\bundles\Doctrine\Bundle\FixturesBundle\Comm

随机推荐