Как правильно экранировать html, отправленный в виде данных в функцию jauery .ajax - PullRequest
8 голосов
/ 08 ноября 2010

ОБНОВЛЕНИЕ : Как только я посмотрел на проблему в Firebug, я сразу же обнаружил свою ошибку. И это была смущающая бесподобная двойная цитата, которую я, должно быть, как-то удалил. Я использовал окно разработчика Chrome. Очень жаль за использование ваших ресурсов. Но урок усвоен! («Надеюсь.)

Каков наилучший способ для меня экранировать символы HTML, которые я хочу отправить на свой сервер? Я использую jQuery, .ajax () и jsonp.

Я пишу букмарклет, который отправляет части html текущей страницы на мой сервер. Вот вызов ajax:

jQuery.ajax({
    url: 'http://www.my_server.com/file.php?callback=?',
    dataType: 'jsonp',
    data: { someHtml: escape(jQuery(this).html().substring(0,1000)) },
    success: function() { // stuff },
    beforeSend: function(xhr) {
                  xhr.setRequestHeader('Content-type','text/html');
                },
    error: function() { // stuff }
});

Мне нужно использовать JSONP, и поэтому я не могу использовать POST, и именно поэтому я усекаю HTML-данные. Все работает, если html «хороший», но если он содержит символы, которые не нравятся javascript, то у меня проблемы. Я исправил свою проблему с помощью escape (), но теперь я думаю, что у меня проблемы с символами новой строки и табуляции.

Консоль разработчика Chrome выдает мне ту же ошибку:

Uncaught SyntaxError: Unexpected token <

что я предполагаю, означает, что какой-то символ заставляет вещи выходить из javascript. Я пробовал следующее: escape (), encodeURI / Component (), serialize (), text (), но пока ничего не получалось. Сначала я не использовал до отправки, но подумал, что должен попробовать, но без разницы.

В настоящее время я застрял в каком-то html-файле, в котором есть разрыв строки, затем табуляция и пара пробелов. Я попытался заменить эти символы с помощью replace ():

... .substring(0,1000).replace(/(\r\n|[\r\n])/g,'')

Я нашел эту строку регулярного выражения на другом сайте, которая должна заменить различные комбинации возвратов каретки и перевода строки.

Надеюсь, я объяснил достаточно ясно. Это мой первый вопрос в Stack Overflow, так что будьте спокойны. :)

1 Ответ

6 голосов
/ 08 ноября 2010

Вам не нужно бежать или кодировать.jQuery позаботится о правильном URL-кодировании данных:

data: { someHtml: $(this).html().substring(0, 1000) },
...