Doctrine查询的自动iconv

时间:2010-07-30 13:28:44

标签: php doctrine iconv

如何在构建查询和获取数据时将Doctrine设置为自动运行iconv()?

3 个答案:

答案 0 :(得分:1)

为什么不直接告诉您使用的RDBMS以UTF-8发送数据? Doctrine_Connection有一个setCharset方法:

$connection->setCharset('utf8');

答案 1 :(得分:1)

好吧,我希望没有人能够在他们的生活中面对字符集转换问题,除了UTF8之外的所有字符集很快就会成为过去。无论如何,只是为了回答我自己的问题。我解决了通过编写一个自定义水合器来扩展Record水合器并覆盖一些过滤器基类的symfony prcessValues方法,如下所示:

abstract class BaseFormFilterDoctrine extends sfFormFilterDoctrine
{
  public function setup()
  {
  }
  public function processValues($values)
  {
    $values = parent::processValues($values);
    $charset = strtolower(str_replace('-','',$this->getTable()->getConnection()->getCharset()));
    if ($charset != 'utf8')
    {
      foreach ($values as $key => $value)
      {
        if (isset($value['text']))
        {
          $values[$key]['text'] = iconv('utf8', $charset, $value['text']);
        }
      }    
    }

    return $values;
  }
}

答案 2 :(得分:0)

setCollation()是相应的。