1

我的 Zend Framework 应用程序无法显示正确的字符。

EG/ rue de l'Odéon

显示为:

rue de l'Odón

通过 Web 服务显示信息以及通过应用程序视图显示信息时。

我尝试了以下事情:

1)在视图中设置字符编码。

$view->setEncoding('UTF-8');

2)确保底层数据库上的col / table编码是UTF8(mysql db)

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8;

3) 在创建我的 Db 连接时将字符集变量传递给 Zend_Db::Factory 方法。这是我通过注册表获得的对象的配置部分。

 [_config:protected] => Array
    (
        [host] => localhost
        [username] => root
        [password] => ---------------
        [dbname] => db_staging
        [charset] => utf8
        [options] => Array
            (
                [caseFolding] => 0
                [autoQuoteIdentifiers] => 1
            )
4

2 回答 2

3

下面几个问题。我知道其中一些听起来很傻,但是当我像这样被卡住时,我会自动认为这是很明显的事情,我会花几天时间踢自己!:) 首先,我假设您使用的是 ZF 1.8 给定上面的字符集选项?如果没有(或者即使下面的列表没有解决它)切换回旧方法,看看是否首先解决了任何问题。

  1. 您能否确认表排序规则现在是 utf8_general_ci,所有文本字段也是如此?上面的命令没有提到排序规则,所以我假设这被设置为默认排序规则(它是缺失时的默认值并且字符集是 utf8)。
  2. 现在,重新发送该命令,但还将排序规则设置为 utf8_unicode_ci(比一般排序规则更慢但更准确 - 性能会受到轻微影响,但它可能有助于现有数据表)。
  3. 您是否重新输入数据只是为了确定?甚至将其输入到已知的 UTF-8 编辑器中,以仔细检查您是否确实复制了 utf8 字符;和
  4. 您是否 100% 确定源文本是 UTF-8 而不是 ISO-8859-1 或 Windows 1252?
  5. 确保尽早设置 View 编码(并将新 View 添加到 ViewRenderer 助手中)。
  6. 用什么mysql驱动?Mysqli 还是 PDO?您是否为您的选项使用了适当的设置?
  7. 是否有任何字符编码的视图覆盖?编码取自 Content-Type 标头,然后是任何 XML 声明(例如 XHTML),最后取自 Content-Type 的元 http-equiv 标记。这也是优先顺序 - 如果较早的声明不同意 UTF-8,则页面可能不会使用您想要的。您可以通过在前端控制器上使用正确的标头集设置自定义响应对象来重置标头 - 通常是“Content-Type: text/html; charset=UTF-8”。
  8. 如果浏览器检测不正确,要检测编码,您还可以通过重置页面的浏览器编码来手动调试,例如在 Firefox 中查看 > 字符编码。检查是 ISO 还是 Windows 编码显示它更好。
  9. 尝试将文本输出包装在 utf8decode() 中的模板中 - 也许有些东西是双重编码的?更诡异的事情发生了……

我的 UTF-8 危机清单;)。让我知道列出的任何内容是否有帮助。我认为它涵盖了我能想到的大部分项目。

于 2009-09-16T13:12:57.127 回答
3

除了 Pádraic 的优秀名单,看看http://akrabat.com/2009/03/18/utf8-php-and-mysql/

于 2009-09-17T07:06:56.093 回答