使用 Doctrine 2 强制编码和解码

2023-12-26

我正在与遗产一起工作大泥球 http://en.wikipedia.org/wiki/Big_ball_of_mud使用一个latin1数据库但适用于utf8字符串。每次应用程序读取或写入数据库时​​,它都会进行解码或编码by hand和商店utf8中的编码字符串latin1数据库。

写入时,它会执行以下操作:

$value = utf8_encode("Iñtërnâtiônàlizætiøn")
mysql_query("INSERT INTO table (key) VALUES ($value)")

所以存储的值为Iñtërnâtiônà lizætiøn

阅读时:

$result = mysql_query("SELECT key FROM table")
$value = utf8_decode($result) // Wich results on "Iñtërnâtiônàlizætiøn" again

我如何使用 Doctrine 2 管理同一个数据库并尊重这种奇怪的行为?

以下代码在我的应用程序中使用时将按预期工作Entity,但我正在寻找一种更清洁、更干燥的解决方案。

public function setKey($value)
{
    $this->key = utf8_encode($value);
}

public function getKey()
{
    return utf8_decode($this->key);
}

您可以创建自己的自定义“字符串”类型并覆盖它的类Doctrine\DBAL\Types\Type. Type::convertToDatabaseValue and 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');
    }
}

然后将该类型以新名称放入 Doctrine 中或替换字符串类型:

<?php
\Doctrine\DBAL\Types\Type::addType('utf8string', 'Utf8StringType');
// replace the default string type
\Doctrine\DBAL\Types\Type::overrideType('string', 'Utf8StringType');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Doctrine 2 强制编码和解码 的相关文章

  • JavaScript blob 编码为 UTF-8 而不是 ANSI

    我使用 JavaScript blob 创建一个 FDF 文件 该文件打开并填充本地存储的 PDF 但是 本地存储的 PDF 的文件路径包含重音字符 并且我无法编辑文件夹名称 当文件夹路径不包含重音符号时 此代码有效 并且如果我在记事本中打
  • Symfony2 - ReferencedColumnName id 为空

    我要放弃食谱文章了表单集合 http symfony com doc current cookbook form form collections html但是 当尝试将其保留到数据库时 我收到约束冲突错误 引用的列名称 id 为空 SQL
  • Doctrine/Symfony 如何使用数组中的特定数据更新实体

    我环顾四周太久了 但没有运气 我的情况是 我有一个有点大的表 60 列 在 Doctrine Entity 中表示 在 FosREST 上工作 我想要实现的是 我想发送带有特定数据的 JSON 例如 phone gt new phone n
  • 使用 DOMDocument 进行 PHP 编码

  • Delphi - 将字符串从 UTF-8 转换回来

    我在将 UTF 8 编码字符串转换回 delphi 可用的字符串时遇到问题 该应用程序是用 XE8 编写的 并部署在 Windows 和 OSX 上 该应用程序分别在 Windows 和 OSX 上使用 LimeLM API dll 和 d
  • Doctrine ORM 按注释对象字段排序

    所以它很简单 我在某个实体中有以下代码 var ServiceOffer ORM OneToMany targetEntity ServiceOffer mappedBy serviceProvider ORM OrderBy servic
  • 如何修复 Python 中损坏的 utf-8 编码?

    我的字符串是Ni m B T t Thi n s Nh t H nh 我想将其解码为Ni m B T t Thi n s Nh t H nh 我在那个网站上看到可以做到这一点http www enderminh com minh utf8
  • 如何编写对 UTF-8 安全的代码?

    我们有一组针对 ASCII 字符集开发的应用程序 现在 我们正尝试在冰岛安装它 但遇到了冰岛字符被搞砸的问题 我们正在解决我们的问题 但我想知道 是否有一个好的 指南 来编写专为 8 位字符设计的 C 代码 并且在提供 UTF 8 数据时可
  • 如何设置外键id的id #sf2 #doctrine2

    我正在尝试手动为对象设置外键 id 但没有找到如何执行此操作 class Item ORM ManyToOne targetEntity MyBundle Entity ItemType inversedBy itemTypes ORM J
  • 如何在ggplot2中使用希腊符号?

    我的类别需要用希腊字母命名 我在用ggplot2 并且它与数据配合得很好 不幸的是 我无法弄清楚如何将这些希腊符号放在 x 轴上 在刻度线处 并使它们出现在图例中 有什么办法可以做到吗 更新 我看了一下link https github c
  • 如何将 default.html 的字符编码设置为 UTF-8?

    我花了几个小时来验证我的网站HTML 4 01 严格事实上我已经成功了 但仍然有一个警告我无法摆脱 警告是 字符编码不匹配 中指定的字符编码 HTTP 标头 iso 8859 1 是 与中的值不同 元素 utf 8 我将使用该值 来自 HT
  • 如何从字符串中删除除字母、数字、空格、感叹号和问号之外的所有内容?

    如何删除除以下内容之外的所有内容 字符串中的字母 数字 空格 感叹号 问号 该方法支持国际语言 UTF 8 非常重要 您可以使用正则表达式 myString replace w s g 这将替换除单词字符 空格 感叹号或问题之外的所有内容
  • PHP UTF-8 配置

    我正在使用 PHP 5 3 5 配置 Apache 2 2 17 服务器 我的目标是创建一个默认为内容类型的干净配置UTF 8 php ini default charset UTF 8 default mimetype applicati
  • Symfony:为什么 isInitialized 总是 false?

    我用教义查询了一个用户 customer this gt getDoctrine gt getRepository DemoUserBundle Customer gt find 1 但我得到了结果 顾客 1441 已初始化 错误的 ID
  • Python。短语表示,如何改变?

    我不知道这个短语中存在的编码是什么 我也想知道这个问题的答案 主要是 我想改变我的措辞 例如 你好世界 变成你好 20世界 0A 老天啊 变成ol C3 A1 20mundo 0A 0A 我想要一个 python 解决方案 如果我有 gt
  • 为什么 Mac OS 上的 C 运行时允许预组合和分解的 UTF-8?

    所以我们都知道 Mac OS 上的文件系统具有使用完全分解的 UTF 8 的古怪功能 如果您调用 POSIX API 例如realpath 例如 您将从 Mac OS 返回这样一个完全分解的 UTF 8 字符串 当使用像这样的 API 时f
  • Doctrine 装置如何覆盖 purger 类?

    From doctrine fixture bundle the console doctrine fixtures load n命令定义如下 https github com doctrine DoctrineFixturesBundle
  • Symfony 学说错误“DoctrineMigrationsBundle 需要启用 DoctrineBundle。”

    我创建了一个新的 Symfony 项目 并且不断收到此消息 DoctrineMigrationsBundle 需要启用 DoctrineBundle 错误并且无法摆脱它 显然我是这个星球上唯一一个收到此错误的人 因为谷歌并没有太大帮助 在
  • 如何去除 XSL 中字符的重音符号?

    我一直在寻找 但找不到相当于字符 规范化空间 的 XSL 函数 也就是说 我的内容带有重音 UNICODE 字符 这很好 但是从该内容中 我正在创建一个文件名 但我不想要这些重音 那么 是否有一些我忽略的东西 或者没有正确地谷歌搜索来轻松处
  • 执行 Boyer-Moore 模式匹配时是否必须考虑编码?

    我即将实现 Boyer Moore 模式匹配算法的变体 具体来说是星期日算法 我问自己 我的字母表大小是多少 它是否取决于编码 可能的字符数 或者我可以假设我的字母表由 256 个符号组成 一个字节可以表示的符号数 在许多其他情况下 将字符

随机推荐

  • Ansible 日期时间时区转换

    有没有办法在我的剧本中的 调试 语句中将ansible日期转换为不同的时区 我不想在剧本级别设置全球时区 我有这个 debug msg Y m d H M S strftime ansible date time epoch 这工作正常 但
  • 尝试的条件约束不是可索引操作

    我正在使用 DynamoDB 对于除 EQ 之外的所有 ComparisonOperators 的查询 API 它一直给出 尝试的条件约束不是可索引操作 错误 是什么原因 TableName My Table name IndexName
  • 使用 C# 程序为 Canon EOS Rebel XS 创建 USB 延时拍摄

    我想知道这是否可能 我想制作自己的软件来通过远程快门释放来控制快门的释放 从图中我看到它的电压为 3 3V 空载 阈值电压为 1 8V 我想知道如果我理解正确的话 我是否可以使用限制大约 5 25v 的 USB 电缆电压 这是否可能 或者我
  • R 根据前一行中的值删除行

    我是 R 新手 尝试根据前一行的值删除行 样本数据 Cust ID Date Value 500219 2016 04 11 12 00 00 0 500219 2016 04 12 16 00 00 0 500219 2016 04 14
  • /usr/bin/sudo 必须由 uid 0 拥有并设置了 setuid 位版本 .ubantu14.04 LTS

    当我为 npm 设置 EACCESS 并在终端中运行 chown 命令以更改所有者权限时 但现在我陷入了困境 sudo usr bin sudo 必须由 uid 0 拥有并设置了 setuid 位 我的版本是 ubuntu14 04 LTS
  • 将查询的所有结果放入 Prolog 中的列表中

    我想知道如何创建一个谓词 将从某个查询中获得的所有结果 因此我得到一个结果并按分号 直到得到 False 放入列表中 例如 如果我写foo X 1 2 3 在一些 Prolog 监听器中 假设结果是 X 11 X 22 False 我想将所
  • 覆盖css文件中的定义

    我有一个 css 文件 它定义了所有样式 tags 像这样 p 我怎样才能写一个在包含具有默认样式的样式表的页面中 没有简单的方法可以做到这一点 不过 有一些常见的技巧可以模拟这种行为 最好使用的方法取决于被覆盖区域的复杂程度以及您想要执行
  • 适用于 GAE 的 Weasyprint Dockerfile

    我正在尝试在 gae 上安装 weasyprint 我知道我们可以通过将运行时从 python 更改为 app yaml 中的自定义来将其传递到 Dockerfile 中来安装外部库 我在为 weasyprint 库创建 Dockerfil
  • Flink:是否有另一种方法来计算平均值和状态变量而不是使用 RichAggregateFunction?

    我不确定必须使用哪个流 Flink 转换来计算某个流的平均值并在 5 秒的窗口内更新状态 假设它是我的状态的整数数组 如果我使用RichFlatMapFunction我可以计算平均值并更新我的数组状态 但是 我必须打电话 streamSou
  • 如何修复“无法识别的 Guid 格式”

    如果我单击以下文件类型 我在 VS 2013 中不断收到此错误 cs cshtml config asax html 我最近刚刚更新到 Visual Studio 2013 Update 2 并修复了兼容性问题以始终运行 devenv ex
  • 如何使用 Meteor 更新插入

    让我的 Meteor upsert 功能正常工作时遇到了一些问题 我相当新 200 行代码 并且遇到了一些麻烦 该集合不断插入额外的行 而不仅仅是更新 我花了过去 30 分钟谷歌搜索 但找不到任何我能理解的例子 这是我的代码 Values
  • 在 Python 中创建菜单 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在用 python 制作一个菜单 需要 打印带有编号选项的菜单 让用户输入编号选项 根据用户选择的选项号 运行特定于该操作的函数 现在
  • 为什么 rspec 没有获取我的规范/支持文件?

    我有一个奇怪的错误 我的spec support文件夹中有一个utilities rb文件来保存一些辅助功能 例如登录方法 规范 支持 utilities rb include ApplicationHelper def sign in u
  • Django REST Framework - 在序列化器测试中设置请求?

    我构建了一个 Web 应用程序 其中后端是使用 Django REST Framework 实现的 现在我正在编写单元测试 并且在测试序列化器方法时遇到了问题 这是我正在努力解决的序列化器方法的一个示例 def get can edit s
  • 学习 Java 编程最重要的事情是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对面向对象编程有很好的理解 但我已经有一段时间没有编程了 我想再学一遍 Java 编程的哪些最重要的方面是必须学习的 这样我才能将自己定位为一
  • jdk/jmods中的jmods目录在应用程序运行时有什么作用吗?

    我有一个使用 OpenJDK 在沙箱环境中运行的应用程序 JDK目录中有一个jmods文件夹 关于 jmods 的文档不是很好 据我了解 如果我想使用 JLink 创建另一个自定义 JRE jmods 很有用 假设我不想这样做 只想拥有一个
  • 负载测试苹果推送通知服务器应用程序

    我开发了一个服务器应用程序 可以将推送消息发送到苹果服务器 我已经用几个设备对其进行了测试 并且能够在设备上获取消息 问题是 当我的数据库中有大约一百万台设备时 我无法知道我的应用程序将如何执行 在这种情况下有没有办法对您的服务器应用程序进
  • WMD Markdown 编辑器 - HTML 到 Markdown 的转换

    我在用wmd http wmd editor com 在做一个项目的markdown编辑器时 有一个问题 当我发布包含 markdown 文本区域的表单时 它 如预期 将 html 发布到服务器 但是 假设服务器端验证失败 我需要将用户发送
  • 为什么 Array#each 返回具有相同元素的数组?

    我正在学习如何做的细节each在 ruby 中工作 我尝试了以下代码行 p 1 2 3 4 5 each element el 结果是一个数组 1 2 3 4 5 为什么返回值是each相同的数组 没有each只是提供一种迭代方法 或者这只
  • 使用 Doctrine 2 强制编码和解码

    我正在与遗产一起工作大泥球 http en wikipedia org wiki Big ball of mud使用一个latin1数据库但适用于utf8字符串 每次应用程序读取或写入数据库时 它都会进行解码或编码by hand和商店utf