Нужно Pure / JQuery Javascript Решение для очистки Word HTML из текстовой области - PullRequest
2 голосов
/ 24 июня 2009

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

У меня есть текстовая область в форме, которая должна определять, когда что-то вставлено в нее, и удалять любые скрытые HTML и кавычки. Содержимое этой формы отправляется по электронной почте в стороннюю систему, которая является особенно стервозной, поэтому иногда даже кодирование ее в символы html-сущности не является безопасной ставкой.

К сожалению, я не могу использовать что-то вроде FCKEditor, TinyMCE и т. Д., В этом случае он должен оставаться обычным текстовым пространством. Я пытался разобрать вставку FCKEditor из функции word, но мне не повезло выследить ее.

Однако я могу использовать библиотеку jQuery, если это необходимо, но пока не нашел для этого плагина jQuery.

Я специально ищу информацию, направленную на очистку вставленной информации, а не на то, как контролировать элемент на предмет изменения содержания.

Любая конструктивная помощь будет принята с благодарностью.

Ответы [ 5 ]

8 голосов
/ 24 июня 2009

Я смотрю на ответ Дэвида Арчера, и он в значительной степени отвечает на него. Я использовал в прошлом решение, подобное его:

$("textarea").change( function() {
    // convert any opening and closing braces to their HTML encoded equivalent.
    var strClean = $(this).val().replace(/</gi, '&lt;').replace(/>/gi, '&gt;');

    // Remove any double and single quotation marks.
    strClean = strClean.replace(/"/gi, '').replace(/'/gi, '');

    // put the data back in.
    $(this).val(strClean);
});

Если вы ищете способ полностью УДАЛИТЬ теги HTML

$("textarea").change( function() {
    // Completely strips tags.  Taken from Prototype library.
    var strClean = $(this).val().replace(/<\/?[^>]+>/gi, '');

    // Remove any double and single quotation marks.
    strClean = strClean.replace(/"/gi, '').replace(/'/gi, '');

    // put the data back in.
    $(this).val(strClean);
});
5 голосов
/ 26 августа 2009

Вы можете проверить Word HTML Cleaner Коннором МакКеем. Это довольно сильный очиститель, поскольку он удаляет много вещей, которые вы, возможно, захотите сохранить, но если это не проблема, это выглядит довольно прилично.

1 голос
/ 05 февраля 2010

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

$("textarea").blur(function() {
    // check input ($(this).val()) for validity here
});
1 голос
/ 24 июня 2009

Что-то вроде этого:

function cleanHTML(pastedString) {
    var cleanString = "";
    var insideTag = false;
    for (var i = 0, var len = pastedString.length; i < len; i++) {
        if (pastedString.charAt(i) == "<") insideTag = true;
        if (pastedString.charAt(i) == ">") {
            if (pastedString.charAt(i+1) != "<") {
                insideTag = false;
                i++;
            }
        }
        if (!insideTag) cleanString += pastedString.charAt(i);
    }
    return cleanString;
}

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

0 голосов
/ 24 июня 2009

Отредактировано из jquery docs ..

$("textarea").change( function() {
    // check input ($(this).val()) for validity here
});

Это для обнаружения изменений. Чистота, вероятно, будет своего рода регулярным выражением

отредактировано выше, чтобы искать текстовую область, а не текстовое поле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...