РЕДАКТИРОВАТЬ: Вы должны использовать DOMParser API, как Владимир предлагает , я отредактировал свой предыдущий ответ, поскольку опубликованная функция привела к уязвимости системы безопасности.
Следующее snippet - это старый код ответа с небольшой модификацией: использование textarea
вместо div
снижает уязвимость XSS, но это все еще проблематично в IE9 и Firefox.
function htmlDecode(input){
var e = document.createElement('textarea');
e.innerHTML = input;
// handle case of empty input
return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}
htmlDecode("<img src='myimage.jpg'>");
// returns "<img src='myimage.jpg'>"
В основном я программно создать элемент DOM, присвоить закодированный HTML его innerHTML и получить nodeValue из текстового узла, созданного при вставке innerHTML. Поскольку он просто создает элемент, но никогда не добавляет его, HTML-код сайта не изменяется.
Он будет работать в кросс-браузере (включая старые браузеры) и принимать все HTML-символы .
РЕДАКТИРОВАТЬ: Старая версия этого кода не работала в IE с пустыми входами, о чем свидетельствует здесь, в jsFiddle (просмотреть в IE). Вышеупомянутая версия работает со всеми входными данными.
ОБНОВЛЕНИЕ: похоже, это не работает с большой строкой, а также представляет собой уязвимость безопасности , см. Комментарии.
var encodedStr = 'hello & world';
var parser = new DOMParser;
var dom = parser.parseFromString(
'<!doctype html><body>' + encodedStr,
'text/html');
var decodedString = dom.body.textContent;
console.log(decodedString);
Если вы используете jQuery:
function htmlDecode(value){
return $('<div/>').html(value).text();
}
В противном случае используйте Strictly Software's Encoder Object , который имеет отличную функцию htmlDecode ()
.
Не прямой ответ на ваш вопрос, но не лучше ли, чтобы ваш RPC возвращал некоторую структуру (будь то XML, JSON или что-то еще) с этими данными изображения (URL-адреса в вашем примере ) внутри этой структуры?
Затем вы можете просто проанализировать его в своем javascript и построить
, используя сам javascript.
Структура, которую вы получите от RPC, может выглядеть так:
{"img" : ["myimage.jpg", "myimage2.jpg"]}
Я думаю, так лучше , так как внедрение кода из внешнего источника на вашу страницу не выглядит очень безопасным. Представьте, что кто-то перехватывает ваш XML-RPC скрипт и помещает туда то, что вам не нужно (даже какой-то javascript ...)