2012-11-15 39 views
7

我在Symfony2中有一个项目,它适用于我的本地主机,但是在将它移动到外部服务器后,问题已经开始。Symfony2用于查询参数的字符集

  1. 我不从包含数据库看到任何结果的名字擦亮字符
  2. 在探查我检查查询:
    • “参数”部分有正确的字符集
    • “可运行查询”具有相同参数,但坏的字符集

例如:

(...) WHERE ((((c1_.name LIKE '%Å�%') OR (c3_.name LIKE '%Å�%') OR (..) Parameters: ['%ś%', '%ś%', (...)]

所有数据库中的表具有的charset = utf8_unicode_ci。

在config.yml我设置

doctrine: 
    dbal: 
     charset: UTF8 

设置框架字符集不起作用。

/config.php测试说:

RECOMMENDATIONS: 
    1. Install and enable a PHP accelerator like APC (highly recommended). 
    2. Set short_open_tag to off in php.ini*. 
    3. Set magic_quotes_gpc to off in php.ini*. 
    * Changes to the php.ini file must be done in "/usr/local/php/php.ini". 

但可惜的是我没有访问php.ini中该服务器上。那可能是magic_quotes_gpc引起这个问题了吗? 我也无法访问命令行,所以我通过ftp和phpmyadmin添加了项目(数据库,文件系统,供应商)。

Becouse我没有在我的本地主机上的问题,我想这是服务器配置的问题,我无法访问,我看到的唯一方法是尝试更改QueryBuilder的charset配置。我在哪里可以做到这一点?你知道还有什么可能导致这个问题?

感谢

+0

你比较了phpinfo();在两台服务器上?否则,您的外部Web服务器是否运行utf-8? (AddDefaultCharset UTF-8,php_value default_charset“UTF-8”内htaccess) – sglessard

+0

我已经设置了字符集UTF8正如你所说,并比较了phpinfos字段和字符集。他们是一样的,但问题仍然存在。我读过这个服务器默认运行latin2,所以我试图把所有东西都改成latin2,但是这并没有帮助。我试图找到替换'?'的地方/功能带有参数数组元素的符号。那是PDOStatment工作吗?我怎么能一步一步检查那里发生了什么? – user1826876

回答

9

找到解决方案: 要设置 “组名称UTF8” 我改变了我的教训配置

doctrine: 
    dbal: 
      driver: %database_driver% 
      host:  %database_host% 
      port:  %database_port% 
      dbname: %database_name% 
      user:  %database_user% 
      password: %database_password% 
      charset: UTF8 
      options: 
      1002: "SET NAMES 'UTF8'" 

现在工作得很好。