2008-07-03

Prado 中解决 Ajax 中文乱码问题

Views: 12645 | Comments Off

在 Prado 中使用 Ajax, 如果你的 page 文件和 php 文件使用的不是 UTF-8 编码, 会遇到中文乱码问题. 原因是 Prado 的 Ajax 模块在交换数据时使用 JSON 格式的文本, 而且限制要转换为 JSON 格式的源文本必须是 ASCII 或者 UTF-8 编码的(见 Web.JavaScripts.TJSON 的 encode 方法的注释).

TJSON.encode 方法尝试把源文本转换为 UTF-8 编码:

if (($g=Prado::getApplication()->getGlobalization(false))!==null && 
	strtoupper($enc=$g->getCharset())!='UTF-8'){
		$var=iconv($enc, 'UTF-8', $var);
}

但是, 默认情况下 application 对象的 _globalization 字段没有初始化, getGlobalization(false) 返回 null, 所以, 你需要设置 application._globalization 字段. 在入口文件 index.php 中的 $application->run() 之前添加如下语句:

$g = $application->getGlobalization();
$g->Charset = "gb2312";

不带参数的 getGlobalization() 方法会先检查 application._globalization 是否为空, 如果为空则先创建一个再返回. 如果你的程序使用其它的编码, 只需要替换 "gb2312" 即可. 或者, 你也可以在 application.xml 文件中定义, 在 modules 节点下添加:

<module id="globalization" class="System.I18N.TGlobalization" charset="gb2312">
</module>

Related posts:

  1. Nginx 499 错误码以及 AJAX 调用失败
  2. iphp框架常用函数
  3. 开发爬虫友好的Ajax网站
  4. 为什么iComet比nginx-push-stream-module更好?
  5. C语言解析JSON
Posted by ideawu at 2008-07-03 20:26:03

Comments are closed.