Как избежать ошибки последовательности URI? - PullRequest
0 голосов
/ 25 августа 2010

Я работаю с 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 для других персонажей.

Эта проблема, похоже, воспроизводится в Firefox и IE7.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2010

Экранирование URL здесь вам не поможет - это для экранирования URL, а не для экранирования текста в HTML. Что вы действительно хотите, так это кодировать строку при ее выводе. Смотрите встроенную библиотеку Encode.pm . Убедитесь, что вы правильно указали операторы charset в заголовках HTTP: «Content-Type: text / html; charset = UTF-8» или что-то в этом роде.

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

0 голосов
/ 25 августа 2010

вы можете попытаться использовать модуль CGI и выполнить

$uri = CGI::escape($uri);

, возможно, это зависит от контекста вашей попытки выхода из URI.Это хорошо сработало для меня в контексте CGI.

После того, как вы добавили детали, я могу предложить:


<div style='display:none;' id='summary_".$note_count."_note'>".CGI::escape($summary)."</div>"; 
...