【问题标题】:Intermittent problem with UTF-8 charactersUTF-8 字符的间歇性问题
【发布时间】:2011-04-19 11:36:33
【问题描述】:

我正在运行一个相当标准的 LAMP 堆栈。

问题是 UTF-8 字符的间歇性正确呈现。大约 50% 的时间非 ASCII UTF-8 字符正确呈现(例如,带有适当的变音符号),但大约 50% 的时间我得到“?”改为演绎。如果我重新加载页面,有时它会纠正问题,有时它不会。它发生在所有平台上的所有浏览器上,这表明是 MYSQL 或 Apache 问题,但我无法弄清楚。

数据库本身是 UTF-8 格式,我在 phpMyAdmin 中浏览数据库时从未遇到过问题。

我在打开数据库时发出 SET NAMES utf-8 命令(并尝试将其更改为 SET CHARSET utf-8 命令),但没有成功。

令我困惑的是它是间歇性的,以条纹形式发生,例如它会连续发生 30 页(即使它们只是重新加载),然后清除 10 页,然后再发生几页,等等。

您可以尝试通过点击此处的“列表”按钮查看问题:http://latin-words.com/list_vocab.php 尽管可能需要多次重新加载才能使其发生或消失

服务器配置: Ubuntu:9.10 mysql:5.1.37 PHP 5.2.10 阿帕奇 2.2.12

任何提示将不胜感激?

【问题讨论】:

    标签: php mysql apache utf-8 lamp


    【解决方案1】:

    编辑:
    为了搜索者的缘故,从 cmets 来看,问题实际上是在执行 SET NAMES utf-8;(不正确)而不是 SET NAMES utf8;(正确)这并不意味着我在下面发布的更模糊的原因也不能成为原因;)


    听起来像是语言环境和iconv 的问题,尝试确定在网络服务器进程中使用了什么locale,当一切正常时,它不再工作(尝试$currentlocale = setlocale(LC_ALL,NULL); 或@987654326 @ 获取使用的语言环境)。

    【讨论】:

    • 我不确定我是否理解您的回答...您认为 Apache 会间歇性地更改语言环境吗?
    • 是的,有些东西(可以是 PHP 进程,不需要是当前进程)正在更改区域设置,这将在 webserver 进程中的后续请求中继续存在,该进程通常服务于退出多个页面.我遇到了与您描述的完全相同的问题,而提到的locale 更改是罪魁祸首。但是自己测试一下:只需回显我给您的 2 个选项的输出,并检查它们是否存在差异/一致性以及正确和错误的字符显示。
    • 无论是否存在问题,它都会显示 C 的语言环境。
    • 嗯,奇怪,我敢发誓就是这样。这里的 '?' 通常不是错误的字符集问题(例如:声称发送一个,但服务于另一个),而是转换为不充分的字符集,因此字符被替换。您的代码中是否有任何位置要切换字符集(iconvmb_convert_encoding 等?唯一的其他位置是用于连接数据库的错误字符集(ascii、latin1 等) . 发出SET NAMES utf8; 时是否出现任何错误?show variables like '%char%'; 是否产生预期的输出?
    • 你太棒了!谢谢你。这是 UTF-8 与 UTF8 的问题。我不知道为什么它有时会起作用,但这似乎已经解决了。
    猜你喜欢
    • 1970-01-01
    • 2011-04-19
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 2014-09-07
    相关资源
    最近更新 更多