2011-03-02 6 views
0

HTMLフォームから検索語を引き出すCGIスクリプトはCGI::Ajaxです。私のスクリプトで結果の文字列にEncode::Detect::Detectorを実行すると、UTF-8の代わりに、フォームに入力された文字に応じて様々なエンコーディングが得られます。ギリシャ文字はUTF-8、ウムラウトはwindows-1252、出力は全くありませんASCII文字。私は、問題がPerlに渡す文字列に何かCGI::Ajaxがあると確信しています。そのコードのどこかにdecodeURI()を使用していますが、私はURI::EscapeEncodeをすべての可能な順列で試しましたが、異なる文字列を単一のエンコーディングに正規化しようとする試みは成功しませんでした。そのままでは、非ASCII文字(ウムラウトまたはギリシア語)の1つまたは他のセットは常に文字化けします。 AjaxにUnicodeのままにする方法を教えてください。UTF-8とCGI :: Ajax

答えて

1

解決済み:CGI::Ajax明らかに、Unicodeを正しく処理しないJavaScriptのescape関数を使用しています。この関数はencodeURIencodeURIComponentに置き換えられました。CGI::Ajaxオブジェクト$pjxのデフォルトのエスケープ関数として、$pjx->js_encode_function('encodeURIComponent');のように設定することができます。 Phew。

0

上記の答えは、しかしから、私は私の呼び出しを変更したときに、私のために動作しませんでした:

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

UTF-8

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

に文字が正しく表示され始めました。

出典:http://search.cpan.org/~bpederse/CGI-Ajax-0.707/lib/CGI/Ajax.pm