在 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>