特殊字符奇怪的行为

时间:2010-06-01 20:12:10

标签: mysql utf-8

我在utf-8 mysql DB中有这个字符串: “Pruebádeeñes”

当我像普通文本一样打印时,一切正常,但是如果我在输入,文本区域等中加载相同的字段,它就变成:“Pruebádeeñes”

我该如何解决这个问题? =(

1 个答案:

答案 0 :(得分:1)

首先,我建议阅读本文:http://www.joelonsoftware.com/articles/Unicode.html(绝对最低每个软件开发人员绝对必须知道关于Unicode和字符集(没有借口!)Joel Spolsky)非常有用。

然后,如果它是MySQL,您可以通过“SET NAMES'utf8'”在连接中设置默认字符集。例如在Zend_Framework中($ db-> query(“SET NAMES'utf8'”);)

另一个选项是在数据中添加过滤器,然后再将其打印到屏幕上。我做了两个手工功能......

function utf8encode ($subject, $action = '//TRANSLIT')
{
   if ( @iconv( 'UTF-8', "UTF-8{$action}", $subject) == $subject ) {
                    #-- the value it's utf8
  } else {
                    $subject = utf8_encode ($subject);
  }

 return $subject;

}

function utf8decode ($subject, $action = '//TRANSLIT')
{
    if ( @iconv( 'UTF-8',  "UTF-8{$action}", $subject) == $subject ){
                      $subject = utf8_decode ($subject);
    } else {
                      #-- the value is probably ISO-8859-1
    }

 return $subject;
}