UTF-8和CGI :: Ajax

时间:2011-03-02 17:55:02

标签: ajax utf-8 cgi

我有cgi脚本通过CGI::Ajax从HTML表单中提取搜索字词。在我的脚本中对结果字符串运行Encode::Detect::Detector时,我会得到(而不仅仅是UTF-8)各种编码,具体取决于表单中输入的字符:希腊字符变为UTF-8,变音符号为windows-1252,并且对于ASCII字符完全没有输出。我很确定问题在于CGI::Ajax对传递给Perl的字符串做了什么。它在代码中的某个地方使用了decodeURI(),我在所有可能的排列中尝试了URI::EscapeEncode,但我没有尝试将不同的字符串规范化为单个编码。实际上,一组或另一组非ASCII字符(变音符号或希腊语)将始终是乱码。我如何告诉Ajax保持Unicode?

2 个答案:

答案 0 :(得分:1)

已解决:CGI::Ajax显然使用Javascript的escape函数,该函数无法正确处理Unicode。该函数已被encodeURIencodeURIComponent取代,可以将其设置为CGI::Ajax对象$pjx的默认转义函数,如下所示:$pjx->js_encode_function('encodeURIComponent');。呼。

答案 1 :(得分:0)

上述答案对我不起作用,但是当我改变了我的电话时:

print $pjx->build_html( $cgi, \&Show_HTML);

print $pjx->build_html( $cgi, \&Show_HTML,  {-charset=>'UTF-8'});

UTF-8字符开始正确显示。

来源:http://search.cpan.org/~bpederse/CGI-Ajax-0.707/lib/CGI/Ajax.pm