Определить, является ли строка закодированным HTML через jQuery?

Я работаю над сценарием проверки, но сталкиваюсь с очень конкретной проблемой.

Если пользователь вводит строку, которая оказывается кодированным символом HTML (например, & или же &), он будет выводиться как символ (и в этом случае). У меня такой вопрос: возможно ли написать функцию, которая определяет, является ли строка закодированным символом? Поэтому, если пользователь вводит один из двух вышеупомянутых параметров, я хочу запустить определенную функцию, а если это не закодированный символ, я хочу сделать что-то еще.

Есть ли способ сделать это?

3 ответа

По определению, если вы не знаете, является ли что-то закодированным объектом HTML или нет, вы не знаете. Либо вы рассматриваете весь текст, поступающий из определенного источника, как закодированный или не закодированный. Зачем? Потому что это всего лишь текст. "& Амп;" это просто текст. Я хотел написать "& amp;" Вот. Я не хочу, чтобы кто-то истолковывал это, я хочу, чтобы оно буквально отображалось как "& amp;".

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

Если вы хотите всегда сохранять именно то, что ввел пользователь, всегда выполняйте весь ввод пользователя через функцию кодирования HTML, которая заменяет все специальные символы на сущности. См . Великий эскапизм (или: что нужно знать, чтобы работать с текстом внутри текста).

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

var string = "Your encoded & decoded string here"

function decode(str){
    return decodeURIComponent(str).replace(/&lt;/g,'<').replace(/&gt;/g,'>');
}

if(string.length == decode(string).length){
    // The string does not contain any encoded html.
}else{
    // The string contains encoded html.
}

Кроме того, это значительно быстрее, чем предложенный метод jQuery.

Что-то вроде этого сделало бы это.

function containsEncoded (val){
    var rHTMLEncoded = /&[^\s]*/;

    return rHTMLEncoded.test(val) ;
}


// Usage 
var encoded = containsEncoded("&amp;");
Другие вопросы по тегам