Я столкнулся со странной ситуацией при обновлении / обновлении устаревшего кода.
У меня есть переменная, которая содержит HTML. Прежде чем я смогу вывести его, он должен быть заполнен большим количеством данных. По сути, у меня есть следующее:
for my $line (@lines) {
$output = loadstuff($line, $output);
}
Внутри loadstuff()
есть следующее
sub loadstuff {
my ($line, $output) = @_;
# here the process is simplified for better understanding.
my $stuff = getOtherStuff($line);
my $result = $output.$stuff;
return $result;
}
Эта функция создает страницу, которая состоит из разных областей. Вся область загружается независимо, поэтому есть цикл for.
Проблемы начинаются прямо здесь. Когда я загружаю страницу с нуля (нажимая на ссылку, Perl выполняет и доставляет HTML), все загружается нормально. Всякий раз, когда я загружаю вторую страницу через AJAX для сравнения, этот HTML-код нарушает кодировку.
Я отследил проблему до этой строки my $result = $output.$stuff
. До конкатенации $output
и $stuff
в порядке. Но потом кодировка в $result
испортилась.
Кто-нибудь знает, почему конкатенация портит мою кодировку? Пока мы обсуждаем эту тему, почему это происходит только тогда, когда вызов выполняется через AJAX?
Редактировать 1
Perl и AJAX-вызовы выполняют одни и те же функции для создания страницы. Поэтому, когда бы я ни исправлял это для AJAX, он ломался для недавно перезагруженных страниц. Похоже, это действительно происходит, только если AJAX начинает вызов.
Единственное отличие в данном конкретном случае состоит в том, что текущие значения для страницы сравниваются со старыми (это функция резервного копирования / восстановления). Отсюда все то же самое. Кодировка в переменных (насколько я могу судить) в порядке. Я даже пытался использовать функции кодирования только для значений, загруженных из AJAX, но безрезультатно. По словам Кейт, сами файлы выглядят как utf8.
Кроме того, у меня есть другая функция с таким же поведением, которая использует ТОЧНЫЕ функции, значения и файлы. Когда вызов запускается из Perl / Apache, кодировка в порядке. Через AJAX, опять же, все испорчено.
Я изучал запрос AJAX (jQuery) и не смог найти ничего странного. Кодировка, похоже, тоже utf8.