免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5231 | 回复: 4

[编码] httpd php gettext utf-8 中文变成问号 [复制链接]

论坛徽章:
0
发表于 2005-12-29 23:45 |显示全部楼层
小弟用php+gettext写了一个页面,指定中文的local为zh_CN,LC_MESSAGES下的汉化文件编码为utf-8。页面就是简单地输出一句中文,在命令行下通过php命令解析可以正确地输出中文,但从httpd访问中文就变为问号(?)。有谁知道这是怎么回事?

[ 本帖最后由 HonestQiao 于 2005-12-30 08:21 编辑 ]

论坛徽章:
0
发表于 2005-12-30 01:53 |显示全部楼层
源码如何?

论坛徽章:
0
发表于 2005-12-30 11:09 |显示全部楼层
目录结构:

  1. hello.php
  2. i18n
  3.    |--zh_CN
  4.          |--LC_MESSAGES
  5.                     |---  amp.po
  6.                     |---  amp.mo
复制代码

源码hello.php (文件编码utf-8):

  1. <html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  2. <?
  3.         define("PKG","hello");
  4.         putenv("zh_CN");
  5.         setlocale(LC_MESSAGES,"zh_CN");
  6.         bindtextdomain(PKG,"./i18n");
  7.         textdomain(PKG);

  8.         echo gettext("hello,world");
  9.         echo "<br> super man kanaka";
  10.         echo "<br>我爱小甜饼";
  11. ?>
复制代码

源码amp.po (文件编码utf-8)

  1. # SOME DESCRIPTIVE TITLE.
  2. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
  3. # This file is distributed under the same license as the PACKAGE package.
  4. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
  5. #
  6. msgid ""
  7. msgstr ""
  8. "Project-Id-Version: PACKAGE VERSION\n"
  9. "Report-Msgid-Bugs-To: \n"
  10. "POT-Creation-Date: 2005-12-29 06:52-0500\n"
  11. "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
  12. "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
  13. "Language-Team: LANGUAGE <LL@li.org>\n"
  14. "MIME-Version: 1.0\n"
  15. "Content-Type: text/plain; charset=UTF-8\n"
  16. "Content-Transfer-Encoding: 8bit\n"

  17. #: hello.php:7
  18. msgid "hello,world"
  19. msgstr "你好,世界"
复制代码

httpd的配置中注释掉AddDefaultLanguage,php.ini中默认的就已经注释掉default-language = iso-8859-1.
也曾试过多种默认语言配置组合,均告失败。上述源码均经过iconv转码为utf-8。

[ 本帖最后由 sniper 于 2005-12-30 11:15 编辑 ]

论坛徽章:
0
发表于 2005-12-30 17:33 |显示全部楼层
虽然不会,还是帮你顶一下,你是为中国人做汉化吗?

论坛徽章:
0
发表于 2005-12-31 12:36 |显示全部楼层
问题已经解决了,将hello.php中
setlocale(LC_MESSAGES,"zh_CN");
改为:
setlocale(LC_ALL,"zh_CN");
这样就可以正常显示汉字,但有时还是会出现乱码刷新一下就好了。
虽然问题已经解决,却不知道为什么这么做就会改善汉字的显示。i18n目录下只有LC_MESSAGES却为何要改为LC_ALL。此外命令行模式下的PHP显示汉字正常,而作为httpd handler的php却会出错,这又是何解释?肯请路过的达人解答。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP