Как избежать ошибки последовательности URI?
Я работаю с Perl. У меня есть данные, сохраненные в базе данных как  “
и я хочу экранировать эти символы, чтобы избежать ошибки последовательности URI на стороне клиента. Эта ошибка, кажется, происходит только на огненной лисе. Исправление, которое я нашел, пока Google не использовал decodeURI
Тем не менее, мне нужно, чтобы другие символы отображались правильно.
Любая помощь? uri_escape
не кажется достаточно на стороне сервера.
Заранее спасибо.
Detalils: В Perl я делаю следующее:
print "<div style='display:none;' id='summary_".$note_count."_note'>".uri_escape($summary)."</div>";
и на стороне сценария Java я хочу прочитать из этого div и поместить его в другое место, как это:
getObj('summary_div').innerHTML= unescape(decodeURI(note_obj.innerHTML));
где note_obj - это скрытый div, который сохранил сводку по perl. Когда я удаляю decodeURI, проблема решается, я не получаю ошибку последовательности URI в java-скрипте. И все же мне нужно использовать decodeURI для других персонажей.
Эта проблема, кажется, воспроизводится на Fire fox и IE7.
2 ответа
Вы можете попробовать использовать модуль CGI и выполнить
$uri = CGI::escape($uri);
может быть, это зависит от контекста вашей попытки убежать от Ури.
Это работало хорошо для меня в контексте CGI.
После того, как вы добавили детали, я могу предложить:
<div style='display:none;' id='summary_".$note_count."_note'>".CGI::escape($summary)."</div>";
Экранирование URL здесь вам не поможет - это для экранирования URL, а не для экранирования текста в HTML. Что вы действительно хотите, так это кодировать строку при ее выводе. Смотрите встроенную библиотеку Encode.pm. Убедитесь, что вы правильно указали операторы charset в заголовках HTTP: "Content-Type: text/html; charset=UTF-8" или что-то в этом роде.
Если вам не повезло, вам также может понадобиться декодировать строку, когда она выходит из базы данных. Это зависит от драйвера базы данных и кодировки...