Symfony / Doctrine:字节序列无效

时间:2014-07-11 10:37:10

标签: postgresql symfony doctrine-orm

我们正在使用Symfony& amp; Doc,安装在Cent OS上。 通过我们的网站(charset = UTF8)使用REST API时,一切正常。

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

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

/var/www/xyz/symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:91,PDOException:SQLSTATE [22021]:字符不在保留曲目中:7错误:编码的无效字节序列\“UTF8 \”:0xe1 0x6e 0x3b at /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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

PostgreSQL也抱怨它包含无效的utf8字符序列。

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