jQuery, комментарии, добавленные с кавычками, не работают, иначе он работает отлично

Если я добавляю комментарий как "привет там собака", она работает отлично, но если существуют какие-либо специальные символы как, 'или "комментарий добавляется успешно к базе данных, но код jQuery не отображает комментарий в списке.

Спасибо за любые подсказки.

function feedbacksubmit () {
// Show the Ajax Loader
$("#ajaxloader").css("display","inline");
var textsubmitted = $("#feedbackinput").val();

if (textsubmitted.length < 5) {
    alert("Don't forget to write something!");
    // Hide the Ajax Loader
    $("#ajaxloader").css("display","none");
}
else {
    $.post("/feedback/ajax/insert/", {feedback: textsubmitted}, 
        function(data) {
            // Place the comment in the top of the list
            $('<li></li>').prependTo("#comment-list").hide().prepend(data.commenttext2insert).fadeIn('slow');
            // Hide the Ajax Loader
            $("#ajaxloader").css("display","none");
            // Clear out the textarea
            $("#feedbackinput").val('');
    }, "json");
}
}

Вот ответ в качестве примера, который не работает с кодом jQuery выше:

{"returnmessage":"The Ajax operation was successful.","returncode":"0","commenttext2insert":"\n\t<div class=\"comment-header\">\n\t\t<span class=\"comment-avatar\">\n\t\t\t<a href=\"\">\n\t\t\t\t\n\t\t\t\t\t<img src=\"/_images/users/photos//17941/nobosh.jpg\" />\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t</a>\n\t\t</span>\n\t\t<span class=\"comment-author\">\n\t\t\t<a href=\"\">\n\t\t\t\t<b>BOB Man</b>\n\t\t\t</a>\n\t\t</span>\n\t\t<span class=\"comment-timestamp\">just now</span>\n\t</div>\n\t<div class=\"comment-body\">\n\t\t<p>12wsa\'</p>\n\t</div>\n"}
1
задан Ry- 18 June 2012 в 13:03
поделиться

3 ответа

Как выглядит ваш ColdFusion (по крайней мере, та часть, где вы возвращаете что-то браузеру)? Если BalusC прав насчет необходимости экранирования символов html в возвращаемых данных, вы можете просто обернуть свой текст функцией HTMLEditFormat, а не писать что-либо на Java.

1
ответ дан 3 September 2019 в 01:12
поделиться

Попробуйте что-нибудь вроде:

$.post("/feedback/ajax/insert/", {feedback: escape(textsubmitted)},
...
1
ответ дан 3 September 2019 в 01:12
поделиться

Если вы готовите HTML на стороне сервера, вам необходимо убедиться, что все зарезервированные символы HTML в управляемом пользователем вводе правильно экранированы, иначе это может привести к тому, что JS-код станет синтаксически некорректным (и сделает ваш сайт уязвимым для XSS). Вам необходимо экранировать как минимум зарезервированные HTML-символы <, >, &, " и ' в HTML-символы < , >, &, " и ' соответственно.

Вы упомянули, что используете Coldfusion, который основан на Java. Поскольку стандартный Java SE/EE API не предоставляет встроенных средств для экранирования, вам придется либо написать их самостоятельно, например,

public static final String escapeHTML(String string){
    StringBuilder builder = new StringBuilder();
    for (char c : string.toCharArray()) {
        switch (c) {
            case '<': builder.append("&lt;"); break;
            case '>': builder.append("&gt;"); break;
            case '&': builder.append("&amp;"); break;
            case '"': builder.append("&quot;"); break;
            case '\'': builder.append("&apos;"); break;
            default: builder.append(c); break;
        }
    }
    return builder.toString();
}

...который можно использовать как

input = escapeHTML(input);

...либо взять, например, Apache Commons Lang StringEscapeUtils#escapeHtml4 который можно использовать как

input = StringEscapeUtils.escapeHtml4(input);

Опять же, делайте это только для ввода, управляемого пользователем. Вам не нужно делать это для любого HTML кода, который вы жестко закодировали в коде на стороне сервера (иначе он будет отображаться как есть). Таким образом, сделайте что-то вроде:

StringBuilder comment = new StringBuilder();
comment.append("<div class=\"comment\">");
comment.append(escapeHTML(input));
comment.append("</div>");

Тем не менее, я уже прокомментировал ваш вопрос, намекнув, что вам лучше сделать это в jQuery, потому что это, в конце концов, гораздо лучше с точки зрения сопровождаемости и возможности повторного использования. Вы же не хотите иметь сырой HTML, спрятанный где-то в глубинах Java-кода. Вы также не хотите, чтобы результат JSON зависел от цели. Просто верните общий (и санированный HTML) результат JSON и позвольте jQuery создать HTML.

0
ответ дан 3 September 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: