我在mysql db中有一个表。我无法控制那些表格内容。我检索的列被编码为UTF-8_danish_ci。数据由具有挪威字符串的字符串组成:å ø æ
。通过mysql CLI访问数据时看起来正确。在symfony2项目中,当我使用doctrine ORM检索数据并尝试json_encode()
时,我得到的错误是我发送给编码的数组的某些部分不是UTF-8。
我甚至制作了一个辅助方法,以确保在发送到编码之前将所有结果转换为UTF-8。在这种情况下,json有效,但显示?
而不是å ø æ
字符。
提前致谢。
答案 0 :(得分:0)
出于一些非常奇怪的原因。显示JSON字符串时,它会显示那些转义的字符。当我将json字符串加载到jquery插件中以进行自动完成时,它正确地解析了这些转义字符。我的yml配置文件中有charset:utf8。不能真正说出为什么原始json逃脱字符并在html页面上正确显示它们。
答案 1 :(得分:-1)
听起来像是从MySQL检索数据的驱动程序的问题。确保charset是您的连接定义的一部分:
doctrine:
dbal:
default_connection: default
connections:
default:
dbname: database
driver: %database_driver%
host: %database_host%
port: %database_port%
user: %database_user%
password: %database_password%
charset: utf8
这将导致Doctrine通过“mysql:host = $ host; dbname = $ db; charset = utf8”连接,显式请求utf8。 (顺便说一句,检查你的PDO版本.. 5.3.6之前的PDO不支持charset =由于某种原因; Doctrine在每次查询之前都使用了“SET NAMES”hack来尝试解决这个问题。如果你使用的是旧的在最新版本的Symfony中,这可能是一个问题。
如果它不是数据库驱动程序,那么您可能有双重编码的字符串和/或带有混合编码的字符串。看一下forceutf8库。