我有cgi脚本通过CGI::Ajax
从HTML表单中提取搜索字词。在我的脚本中对结果字符串运行Encode::Detect::Detector
时,我会得到(而不仅仅是UTF-8)各种编码,具体取决于表单中输入的字符:希腊字符变为UTF-8
,变音符号为windows-1252
,并且对于ASCII字符完全没有输出。我很确定问题在于CGI::Ajax
对传递给Perl的字符串做了什么。它在代码中的某个地方使用了decodeURI()
,我在所有可能的排列中尝试了URI::Escape
和Encode
,但我没有尝试将不同的字符串规范化为单个编码。实际上,一组或另一组非ASCII字符(变音符号或希腊语)将始终是乱码。我如何告诉Ajax保持Unicode? p>
答案 0 :(得分:1)
已解决:CGI::Ajax
显然使用Javascript的escape
函数,该函数无法正确处理Unicode。该函数已被encodeURI
和encodeURIComponent
取代,可以将其设置为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