0

我已经使用 utf8_unicode_ci 排序规则设置了一个 MySQL 数据库,并且它上面的所有表和列都有相同的排序规则。

我的 Doctrine 配置有 SET NAMES utf8 作为连接选项,我的 html 文件使用 utf8 字符集。

保存在这些表格中的文本包含重音字符(á、è 等)。

问题是当我将内容保存到数据库时,它会以奇怪的字符保存,就像我尝试在 UTF8 表中保存 ISO 时一样。(例如:Notícias)

我发现的唯一解决方法是在保存之前使用 utf8_decode,在打印之前使用 utf8_encode。

这意味着,由于某种原因,介于两者之间的东西正在将 utf8 与 iso 混淆。

可能是什么?

谢谢。

编辑:

我已经设置在保存之前进行编码,在打印之前进行解码,它可以正确打印,但在 DB 中我的字符更改为:

XPTÓ -> XPTÓ</p>

这使得在 DB 中搜索“XPTÓ”变得不可能......

4

1 回答 1

0

我会print bin2hex($string);在原始工作流程的每一步(即没有编码/解码步骤)。

遍历每个:

  1. 原始$_POST数据
  2. 表单验证后获得的值
  3. 放入绑定实体中的值
  4. 如果您直接使用 PDO 查询它,您将从 db 获得的值(从 获取
    $em->getConnection()
  5. 重新加载时填充到您的实体中的值(可以通过这样做$em->detach($entity); $entity = $em->find('Entity', $id);

您将查看输出更改的点,并将搜索重点放在那里。

我还会仔细检查:

  • 在 db 上:SHOW CREATE TABLE 'table'显示CHARSET=utf8整个表(各个列没有什么不同)
  • 您用来查看数据库值的工具(Navicat、phpMyAdmin)具有正确的编码集。
于 2013-05-07T01:27:27.653 回答