我们正在使用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)配置如下:
我在日志中看到了这些错误,但我自己永远无法重现它。 我尝试使用带有Content-Type的API:application / json; charset = ...但它也有效。
我真的不明白为什么会发生这种错误。而且为什么在错误中,内容被编码(\ x74 \ x78 \ x6e \ x5f ...)。如果我尝试连接到pgsql并插入重音字符(未编码),它也可以...
有人知道如何解决这个问题吗?
谢谢!
答案 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使用不当。