Кодировать скрипты cgi UTF-8 или нет? - PullRequest
0 голосов
/ 17 сентября 2011

Я кодировал весь свой веб-сайт в UTF-8 после прочтения об основах кодирования и наборов символов и всего такого.Я только что загрузил скрипт cgi в кодировке UTF-8.Он читает данные из HTML-формы (также UTF-8), и я получаю ошибку 500.Я даже написал сценарий, чтобы сказать «ОК», и он не работает.Я имею в виду, что нет чтения из формы, нет чтения ничего, просто печатается строка.

#!/usr/bin/perl
use utf8;
BEGIN {
    $| = 1;
    open (STDERR, ">&STDOUT");
    print qq~Content-type: text/html\n\n~;
}
print "ok";

Я переместил использование "utf8;"ниже блока НАЧАТЬ и ни один не работает.Итак, ошибка 500 говорит о том, что скрипт не читается, так как если бы у него не было 755 разрешений (у него есть).

Итак, мой вопрос не о чтении данных UTF8, а о запуске зашифрованного сценария perl в кодировке UTF8.

Должен ли я сохранять свои сценарии в кодировке ANSI (и обходить чтение данных utf8 из форм HTML)?

У меня Perl 5.8 работает на Apache в Linux.И ... если я закодирую скрипт в Ansi, он будет работать хорошо (за исключением чтения символов UTF-8, но это уже другая история)

1 Ответ

4 голосов
/ 17 сентября 2011

use utf8 означает только то, что ваш исходный код Perl находится в UTF-8. Это не имеет никакого отношения к тому, может ли скрипт обрабатывать данные UTF-8 из формы.

Если ваш скрипт перестает работать при добавлении строки use utf8;, я вижу две возможные проблемы:

  1. Что-то не так с вашей установкой Perl, поэтому вы получаете сообщение об ошибке при попытке загрузить utf8.pm или (что более вероятно)

  2. Ваш редактор вставляет BOM при сохранении файла в формате UTF-8. Спецификация мешает обработке #!, поэтому ваш сценарий не может быть запущен.

...