postgresql - Symfony/学说 : Invalid byte sequence

标签 postgresql symfony doctrine-orm

我们正在使用安装在 Cent OS 上的 Symfony 和 Doctrine 开发 REST API。 通过我们的网站 (charset=UTF8) 使用 REST API 时,一切正常。

但当外部用户使用 API 并尝试发送一些重音字符(à、î、...)时,其中一些用户会遇到以下错误:

[2014-07-11 09:53:22] request.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\DBALException: "执行 'INSERT INTO xyz.abc (id, creation_date, ip, type, message) 时发生异常) VALUES (?, ?, ?, ?, ?)' with params [19, null, "173.0.81.1", "VALID_TRANSACTION", "\x74\x78\x6e\x5f..."]: SQLSTATE[22021] : 字符不在轨道中:7 错误:编码“UTF8”的字节序列无效:0xe1 0x6e 0x3b“

/var/www/xyz/symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:91, PDOException: SQLSTATE[22021]: Character not in repertoire: 7 ERROR: 编码字节序列无效\"UTF8\": 0xe1 0x6e 0x3b 在/var/www/xyz/symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php:165)"} []

我们的 PostgreSQL 数据库 (psql -l) 配置如下:

  • 姓名:XYZ
  • 编码:UTF8
  • 整理:en_US.UTF-8
  • 查尔。类型:en_US.UTF-8

我在日志中看到了这些错误,但我自己无法重现。 我尝试使用 API with Content-Type: application/json; charset=... 但它也有效。

我真的不明白为什么会出现这个错误。还有为什么在错误中,内容被编码 (\x74\x78\x6e\x5f...)。如果我尝试连接到 pgsql 并插入重音字符(未编码),它也可以工作...

有人知道如何解决这个问题吗?

谢谢!

最佳答案

很可能有人试图使用非 utf8 有效消息调用您的 REST API。

Doctrine 的 BDALException 使用 json_encode 打印绑定(bind)参数,但如果失败(因为它不是 utf-8),它将 print it hex .

PostgreSQL 还提示它包含无效的 utf8 字符序列。

message starts with txn_ (这似乎是有效的)但后来有 "\xe1\x6e\x3b" 在里面,这是无效的。这可能是您的 API 使用不当。

关于postgresql - Symfony/学说 : Invalid byte sequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24695748/

相关文章:

postgresql - 在没有子查询的 PostgreSQL 中占总数的百分比

symfony - 无法在 Symfony 2.1.1 中生成引导文件

php - 订单日期查询,语法错误

php - 选择并计算连接表

Symfony 2 覆盖实体并添加额外属性

perl - 插入 PostgreSQL/PostGIS 数据库太慢

postgresql - 即使 Kubernetes Pod 被杀死,如何保持长期连接处于事件状态?

ruby-on-rails - Activerecord-PostgreSQL 适配器错误

php - 如何获取特定用户的连接对象?

php - Symfony2/Doctrine 在类表继承中间映射父类(super class)