UTF-8 и CGI :: Ajax - PullRequest
       27

UTF-8 и CGI :: Ajax

0 голосов
/ 02 марта 2011

У меня есть скрипт cgi, извлекающий поисковые запросы из формы HTML через CGI::Ajax. При запуске Encode::Detect::Detector над полученной строкой в ​​моем скрипте, вместо UTF-8, я получаю различные кодировки в зависимости от символов, введенных в форму: греческие символы отображаются как UTF-8, умлаут как windows-1252 и вообще нет вывода для символов ASCII. Я вполне уверен, что проблема заключается в том, что CGI::Ajax делает со строкой, которую он передает Perl. Он использует decodeURI() где-то в своем коде, я пробовал URI::Escape и Encode во всех возможных перестановках, но ни одна из моих попыток нормализовать различные строки для одной кодировки не была успешной. Как таковой, тот или иной набор не-ASCII символов (умляутов или греков) всегда будет искажен. Как мне сказать, чтобы Ajax оставил Unicode?

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Решено: CGI::Ajax очевидно использует функцию Javascript escape, которая не обрабатывает Юникод правильно.Функция была заменена encodeURI и encodeURIComponent, которые можно установить в качестве экранирующих функций по умолчанию для CGI::Ajax объекта $pjx, например: $pjx->js_encode_function('encodeURIComponent');.Уф.

0 голосов
/ 22 ноября 2017

Приведенный выше ответ не сработал для меня, однако, когда я изменил свой вызов с:

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

...