Как избежать ошибки последовательности 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" или что-то в этом роде.

Если вам не повезло, вам также может понадобиться декодировать строку, когда она выходит из базы данных. Это зависит от драйвера базы данных и кодировки...

Другие вопросы по тегам