Кодуйте HTML-сутності в JavaScript


100

Я працюю в системі управління вмістом, яка дозволяє користувачам вводити вміст. Проблема в тому, що коли вони додають символи ®, це може не відображатися добре у всіх браузерах. Я хотів би створити список символів, які потрібно шукати, а потім перетворити на відповідну сутність html. Наприклад

® => ®
& => &
© => ©
™ =>™

Після перетворення його потрібно обернути <sup>тегом, в результаті чого:

® => <sup>&reg;</sup>

Оскільки необхідний певний розмір шрифту та стиль заповнення:

sup { font-size: 0.6em; padding-top: 0.2em; }

Чи був би JavaScript подібним?

var regs = document.querySelectorAll('®');
  for ( var i = 0, l = imgs.length; i < l; ++i ) {
  var [?] = regs[i];
  var [?] = document.createElement('sup');
  img.parentNode.insertBefore([?]);
  div.appendChild([?]);
}

Де "[?]" Означає, що є щось, у чому я не впевнений.

Додаткові деталі:

  • Я хотів би зробити це на чистому JavaScript, а не на тому, що вимагає бібліотеки, як jQuery, дякую.
  • Бекенд - це Рубі
  • Використання RefineryCMS, яка побудована разом з Ruby on Rails

Який ваш сервер? Якщо це php, є функції, які подбають про це, і я впевнений, що вони є і в інших мовах. Також Google: developwithstyle.com/articles/2010/06/29/…
Кріс Бейкер,

5
Кращим рішенням може бути прийняття та виведення тексту, закодованого UTF-8. Кожен браузер, що використовується сьогодні, підтримує UTF-8. На стороні HTML ви хочете додати accept-charset="UTF-8"до свого <form>тегу. На сервері ви хочете переконатися, що ваш вивід закодований UTF-8, і що ваш веб-сервер повідомляє браузеру, що він є (через Content-Typeзаголовок). Див. Rentzsch.tumblr.com/post/9133498042/ ... Якщо ви все це зробите, а браузер не відображає символ правильно, тоді заміна символу на сутність не матиме ніякої різниці.
Пол Д. Уейт,

@Chris працює в CMS, побудованій за допомогою Ruby on Rails.
JGallardo

Неправильно змінювати символ на посилання на сутність HTML у клієнтському JavaScript, оскільки клієнтський JavaScript працює на DOM, де сутності не існують. Обтікання «®» supелементами, як правило, спричиняє більше проблем, ніж це могло б вирішити, оскільки у багатьох шрифтах «®» є невеликим і знаходиться в нижньому індексі, тому ви зменшите його до невпізнання.
Jukka K. Korpela

@ JukkaK.Korpela, тож враховуючи, що мені потрібно звернутися до того, що деякі сутності html не відображатимуться належним чином, як би ви це вирішили? І обгортання <sup>не є проблемою, оскільки я протестував конкретні шрифти, що використовуються для публікацій у блозі, але це хороший момент, який слід врахувати.
JGallardo

Відповіді:


176

Ви можете використовувати регулярний вираз для заміни будь-якого символу в заданому діапазоні Юнікоду його еквівалентом сутності html. Код буде виглядати приблизно так:

var encodedStr = rawStr.replace(/[\u00A0-\u9999<>\&]/g, function(i) {
   return '&#'+i.charCodeAt(0)+';';
});

Цей код замінить усі символи в заданому діапазоні (unicode 00A0 - 9999, а також амперсанд, більший і менший ніж) на їх еквіваленти сутностей html, саме &#nnn;там, звідки nnnми отримуємо значення юнікоду charCodeAt.

Подивіться це в дії тут: http://jsfiddle.net/E3EqX/13/ (цей приклад використовує jQuery для селекторів елементів, що використовуються у прикладі. Сам базовий код, вище, не використовує jQuery)

Здійснення цих перетворень не вирішує всіх проблем - переконайтеся, що ви використовуєте кодування символів UTF8, переконайтеся, що ваша база даних зберігає рядки в UTF8. Ви все ще можете бачити випадки, коли символи відображаються неправильно, залежно від конфігурації системного шрифту та інших проблем, які не піддаються контролю.

Документація


Щиро дякую за jsfiddle. Тож реалізувати це. Я можу просто додати це до свого .jsфайлу та додати інші речі, які потрібно обернути символом <sup>?
JGallardo

2
@JGallardo Я трохи переписав приклад, щоб він додав supтег (або будь-який інший тег), і він міститься у функції: jsfiddle.net/E3EqX/4 . Для цього потрібно скопіювати функцію "encodeAndWrap" у свій проект.
Chris Baker

1
@Chris дякую за акуратний фрагмент коду, хоча у нього є одна помилка: "[\ u00A0- \ u99999]" робить не те, що ви очікуєте, а дорівнює "[\ u00A0- \ u9999] | 9 "- тобто. символ "9" також буде помилково замінений суттю HTML. Ви можете спробувати це і в скрипці. Я запропоную виправлення відповіді.
SB

@SB Дякую за цю замітку, я навіть мав віддати остаточний голос схвалення :)
Кріс Бейкер

1
Хоча я згоден з тим, що відповідь @mathias Bynens є більш повною, його рішення становить 84 КБ, і це змусило мене продовжувати шукати альтернативне. Це здається нормальним, проте чи можна також включити charCodes <65 і між> 90 && <97?
Флоріан Мертенс

62

Наразі прийнята відповідь має кілька питань. Цей пост пояснює їх і пропонує більш надійне рішення. Рішення, запропоноване у цій відповіді, раніше мало:

var encodedStr = rawStr.replace(/[\u00A0-\u9999<>\&]/gim, function(i) {
  return '&#' + i.charCodeAt(0) + ';';
});

iПрапор є зайвим , оскільки ніякого символ Юнікоду в діапазоні від U + 00A0 до U + 9999 не має великі букви / нижній регістр варіант , який знаходиться за межами того ж діапазон.

mПрапор є зайвим , оскільки ^або $не використовується в регулярному виразі.

Чому діапазон U + 00A0 - U + 9999? Це здається довільним.

У будь-якому випадку, для рішення, яке правильно кодує всі, крім безпечних та друкуваних символів ASCII у вхідних даних (включаючи астральні символи!), Та реалізує всі посилання на іменовані символи (не тільки ті, що в HTML4), використовуйте бібліотеку he (застереження: ця бібліотека моя ). З його README:

він (для “сутностей HTML”) - це надійний кодер / декодер сутності HTML, написаний на JavaScript. Він підтримує всі стандартизовані посилання на іменовані символи відповідно до HTML , обробляє неоднозначні амперсанди та інші крайні випадки, як це робить браузер , має розширений набір тестів, і - на відміну від багатьох інших рішень JavaScript - він чудово обробляє символи астрального Unicode. Доступна онлайн-демонстрація.

Також див. Цю відповідну відповідь на переповнення стека .


12
Крім того, бібліотека ВНЗ становить ... 84 КБ! Autch ... Спробуйте завантажити це на мобільний телефон через менший зв’язок. Потрібно десь піти на компроміс ..
Флоріан Мертенс

1
@FlorianMertens Після мініфікації + gzip він становить ~ 24 КБ. Це все ще велике, але врешті-решт, якщо ви хочете правильно декодувати HTML-сутності, вам знадобляться всі дані про них - це ніяк не можна обійти. Якщо ви можете знайти спосіб зменшити кількість бібліотеки, не впливаючи на продуктивність, надішліть запит на витяг.
Mathias Bynens

2
@MathiasBynens, без сумніву, ваша бібліотека хороша, але ви можете використовувати поле коментарів, щоб виділити проблему в прийнятих відповідях, і надішліть свою покращену відповідь у блоці коду
diEcho

3
@drzaus Зображення можуть уникнути великих розмірів, оскільки вони зберігають багато даних, і менш стислі дані швидше декодуються. Однак програмний код відрізняється, дуже часто додається ціла бібліотека, і вона мало використовується. Код бібліотек іноді містить більше рядків, ніж ваш власний код! Плюс мало кому буде заважати знаходити / налагоджувати проблеми з бібліотеками та надсилати звіти про помилки (або навіть оновлювати бібліотеку), тому витік пам'яті або інші проблеми можуть зберігатися в програмному забезпеченні з багатьма бібліотеками з непровіреним кодом. Якщо хтось просто хоче кодувати / уникати html-небезпечних символів, потрібно лише кілька рядків, а не 80 кб.
bryc

1
@MarcoKlein Так, я пояснюю це у своєму дописі. Це справді проблема, від якої страждає фрагмент коду помилок. Рішення, на яке я вказую, не має цієї проблеми. (див. "включаючи астральні символи!")
Матіас Байнс,

29

У мене була та ж проблема, і я створив 2 функції для створення сутностей і перекладу їх назад до звичайних символів. Наступні методи перекладають будь-який рядок у сутності HTML і назад на прототип String

/**
 * Convert a string to HTML entities
 */
String.prototype.toHtmlEntities = function() {
    return this.replace(/./gm, function(s) {
        // return "&#" + s.charCodeAt(0) + ";";
        return (s.match(/[a-z0-9\s]+/i)) ? s : "&#" + s.charCodeAt(0) + ";";
    });
};

/**
 * Create string from HTML entities
 */
String.fromHtmlEntities = function(string) {
    return (string+"").replace(/&#\d+;/gm,function(s) {
        return String.fromCharCode(s.match(/\d+/gm)[0]);
    })
};

Потім ви можете використовувати його наступним чином:

var str = "Test´†®¥¨©˙∫ø…ˆƒ∆÷∑™ƒ∆æøπ£¨ ƒ™en tést".toHtmlEntities();
console.log("Entities:", str);
console.log("String:", String.fromHtmlEntities(str));

Вихід у консолі:

Entities: &#68;&#105;&#116;&#32;&#105;&#115;&#32;&#101;&#180;&#8224;&#174;&#165;&#168;&#169;&#729;&#8747;&#248;&#8230;&#710;&#402;&#8710;&#247;&#8721;&#8482;&#402;&#8710;&#230;&#248;&#960;&#163;&#168;&#160;&#402;&#8482;&#101;&#110;&#32;&#116;&#163;&#101;&#233;&#115;&#116;
String: Dit is e´†®¥¨©˙∫ø…ˆƒ∆÷∑™ƒ∆æøπ£¨ ƒ™en t£eést 

Це рішення також працює на tvOS, тому може вирішити проблеми з кодуванням у всіх випадках.
loretoparisi

4
Хіба це не трохи екстремально? Ви перетворюєте все в сутності HTML, навіть "безпечні" символи, такі як "abc", "123" ... навіть пробіли
AJPerez,

1
Це погана відповідь. 50% + документів в Інтернеті містять переважно латиницю1 з деякими utf-8. Ваше кодування безпечних символів збільшить його розмір на 500% до 600% без будь-яких переваг.
HoldOffHunger

Поясніть, будь ласка, призначення mмодифікатора шаблону у шаблоні, який не має прив’язок. Отже, ви маєте на увазі використанняs шаблон, що містить крапку?
mickmackusa

19

Без будь-якої бібліотеки, якщо вам не потрібно підтримувати IE <9, ви можете створити елемент html і встановити його вміст за допомогою Node.textContent :

var str = "<this is not a tag>";
var p = document.createElement("p");
p.textContent = str;
var converted = p.innerHTML;

Ось приклад: https://jsfiddle.net/1erdhehv/


2
Чому б не використовувати innerText замість textContent?
Рік

@Rick, дай постріл документу MDN для textContent, зв’язаного у відповіді. Цитуючи це "textContent і HTMLElement.innerText легко сплутати, але ці два властивості різні у важливих аспектах ."
Адарша

18

Ви можете використовувати це.

var escapeChars = {
  '¢' : 'cent',
  '£' : 'pound',
  '¥' : 'yen',
  '€': 'euro',
  '©' :'copy',
  '®' : 'reg',
  '<' : 'lt',
  '>' : 'gt',
  '"' : 'quot',
  '&' : 'amp',
  '\'' : '#39'
};

var regexString = '[';
for(var key in escapeChars) {
  regexString += key;
}
regexString += ']';

var regex = new RegExp( regexString, 'g');

function escapeHTML(str) {
  return str.replace(regex, function(m) {
    return '&' + escapeChars[m] + ';';
  });
};

https://github.com/epeli/underscore.string/blob/master/escapeHTML.js

var htmlEntities = {
    nbsp: ' ',
    cent: '¢',
    pound: '£',
    yen: '¥',
    euro: '€',
    copy: '©',
    reg: '®',
    lt: '<',
    gt: '>',
    quot: '"',
    amp: '&',
    apos: '\''
};

function unescapeHTML(str) {
    return str.replace(/\&([^;]+);/g, function (entity, entityCode) {
        var match;

        if (entityCode in htmlEntities) {
            return htmlEntities[entityCode];
            /*eslint no-cond-assign: 0*/
        } else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) {
            return String.fromCharCode(parseInt(match[1], 16));
            /*eslint no-cond-assign: 0*/
        } else if (match = entityCode.match(/^#(\d+)$/)) {
            return String.fromCharCode(~~match[1]);
        } else {
            return entity;
        }
    });
};

4
Додавання випадкової підмножини кодованих символів вручну, ймовірно, накопичує проблеми для вас та ваших колег. Повинен бути єдиний авторитет, для якого слід кодувати символи, ймовірно, браузер або, якщо не вдається створити певну бібліотеку, яка, ймовірно, буде всебічною та підтримуваною.
user234461

Чудово, @ user234461. Якщо хтось знайде цю єдину владу, запитуючий розум (як я) хотів би знати!
idungotnosn

7

Якщо ви хочете уникати кодування html-сутностей більше одного разу

function encodeHTML(str){
    return str.replace(/([\u00A0-\u9999<>&])(.|$)/g, function(full, char, next) {
      if(char !== '&' || next !== '#'){
        if(/[\u00A0-\u9999<>&]/.test(next))
          next = '&#' + next.charCodeAt(0) + ';';

        return '&#' + char.charCodeAt(0) + ';' + next;
      }

      return full;
    });
}

function decodeHTML(str){
    return str.replace(/&#([0-9]+);/g, function(full, int) {
        return String.fromCharCode(parseInt(int));
    });
}

# Приклад

var text = "<a>Content &#169; <#>&<&#># </a>";

text = encodeHTML(text);
console.log("Encode 1 times: " + text);

// &#60;a&#62;Content &#169; &#60;#&#62;&#38;&#60;&#38;#&#62;# &#60;/a&#62;

text = encodeHTML(text);
console.log("Encode 2 times: " + text);

// &#60;a&#62;Content &#169; &#60;#&#62;&#38;&#60;&#38;#&#62;# &#60;/a&#62;

text = decodeHTML(text);
console.log("Decoded: " + text);

// <a>Content © <#>&<&#># </a>

Це корисно лише у тому випадку, якщо для початку у вас є змішаний частково екранований текст, і він вводить помилки, оскільки не може належним чином кодувати всі рядки: <#>вийде як<#&#62;
Рік,

@Rick Дякуємо за повідомлення про це, я оновив свою відповідь, щоб зробити її кращою.
StefansArya

4

Спеціальні символи HTML та його ESCAPE CODES

Зарезервовані символи повинні бути захищені за допомогою HTML: ми можемо використовувати захищений символ для представлення будь-якого символу Unicode [Приклад: & - U + 00026] у HTML, XHTML або XML, використовуючи лише символи ASCII. Цифрові посилання на символи [ Приклад: амперсанд (&) - &#38;] & Посилання на іменовані символи [Приклад: &amp;] - це типи character escape used in markup.


Визначені сутності

    Original Character     XML entity replacement    XML numeric replacement  
                  <                                    &lt;                                           &#60;                    
                  >                                     &gt;                                         &#62;                    
                  "                                     &quot;                                      &#34;                    
                  &                                   &amp;                                       &#38;                    
                   '                                    &apos;                                      &#39;                    

Для відображення HTML - теги в якості нормальної форми в веб - сторінки , ми використовуємо <pre>, <code>теги або ми можемо уникнути їх. Втеча з рядка, замінивши будь-яке входження "&"символу на рядок, "&amp;"а будь-яке входження ">"символу на рядок "&gt;". Приклад:stackoverflow post

function escapeCharEntities() {
    var map = {
        "&": "&amp;",
        "<": "&lt;",
        ">": "&gt;",
        "\"": "&quot;",
        "'": "&apos;"
    };
    return map;
}

var mapkeys = '', mapvalues = '';
var html = {
    encodeRex : function () {
        return  new RegExp(mapkeys, 'g'); // "[&<>"']"
    }, 
    decodeRex : function () {
        return  new RegExp(mapvalues, 'g'); // "(&amp;|&lt;|&gt;|&quot;|&apos;)"
    },
    encodeMap : JSON.parse( JSON.stringify( escapeCharEntities () ) ), // json = {&: "&amp;", <: "&lt;", >: "&gt;", ": "&quot;", ': "&apos;"}
    decodeMap : JSON.parse( JSON.stringify( swapJsonKeyValues( escapeCharEntities () ) ) ),
    encode : function ( str ) {
        var encodeRexs = html.encodeRex();
        console.log('Encode Rex: ', encodeRexs); // /[&<>"']/gm
        return str.replace(encodeRexs, function(m) { console.log('Encode M: ', m); return html.encodeMap[m]; }); // m = < " > SpecialChars
    },
    decode : function ( str ) {
        var decodeRexs = html.decodeRex();
        console.log('Decode Rex: ', decodeRexs); // /(&amp;|&lt;|&gt;|&quot;|&apos;)/g
        return str.replace(decodeRexs, function(m) { console.log('Decode M: ', m); return html.decodeMap[m]; }); // m = &lt; &quot; &gt;
    }
};

function swapJsonKeyValues ( json ) {
    var count = Object.keys( json ).length;
    var obj = {};
    var keys = '[', val = '(', keysCount = 1;
    for(var key in json) {
        if ( json.hasOwnProperty( key ) ) {
            obj[ json[ key ] ] = key;
            keys += key;
            if( keysCount < count ) {
                val += json[ key ]+'|';
            } else {
                val += json[ key ];
            }
            keysCount++;
        }
    }
    keys += ']';    val  += ')';
    console.log( keys, ' == ', val);
    mapkeys = keys;
    mapvalues = val;
    return obj;
}

console.log('Encode: ', html.encode('<input type="password" name="password" value=""/>') ); 
console.log('Decode: ', html.decode(html.encode('<input type="password" name="password" value=""/>')) );

O/P:
Encode:  &lt;input type=&quot;password&quot; name=&quot;password&quot; value=&quot;&quot;/&gt;
Decode:  <input type="password" name="password" value=""/>

Це чудово для додавання вихідного коду html у форматі Json у рядок iframe srcdoc.
Хмара Нім

Сюди не входить ®, тому це не допоможе ОП. Крім того, цей JS набагато складніший, ніж багато інших рішень, навіть тих, що використовують лише коротке відображення, подібне до цього. swapJsonKeyValues ​​називається погано, оскільки вимагає побічних ефектів (визначення макетів та мапвелей)
Рік,

@mickmackusa Я оновив пост зі значеннями налагодження. mмістить спеціальні символи вхідного рядка.
Яш,

Якщо в дописі є якась помилка. Отже, спробуйте виправити публікацію та надати коментарі.
Яш,

3
var htmlEntities = [
            {regex:/&/g,entity:'&amp;'},
            {regex:/>/g,entity:'&gt;'},
            {regex:/</g,entity:'&lt;'},
            {regex:/"/g,entity:'&quot;'},
            {regex:/á/g,entity:'&aacute;'},
            {regex:/é/g,entity:'&eacute;'},
            {regex:/í/g,entity:'&iacute;'},
            {regex:/ó/g,entity:'&oacute;'},
            {regex:/ú/g,entity:'&uacute;'}
        ];

total = <some string value>

for(v in htmlEntities){
    total = total.replace(htmlEntities[v].regex, htmlEntities[v].entity);
}

Рішення масиву


3
Поясніть, будь ласка, як це вирішує проблему унікальним кращим способом, ніж вище. На перший погляд, здається, що це рішення повільніше, оскільки воно змінює рядок за кілька проходів замість усіх за один раз. Однак я можу помилитися. У будь-якому випадку, ви повинні підкріпити свою публікацію поясненнями.
Джек Гіффін,

Це альтернатива, ви можете використовувати регулярний вираз прямо з масиву ...: D
Сезар Де ла Крус

Це один регулярний вираз для кожного символу (для v у ....). Якщо ви хочете охопити весь UTF-8, це буде 65 000 регулярних виразів і 65 000 рядків виконання.
HoldOffHunger

2
Мене цікавить лише перетворення трьох символів в сутності, тому ця відповідь є кращою в моєму випадку, і я радий, що це було тут
Дрю

2

Якщо ви вже використовуєте jQuery, спробуйте html().

$('<div>').text('<script>alert("gotcha!")</script>').html()
// "&lt;script&gt;alert("gotcha!")&lt;/script&gt;"

Текстовий вузол в пам'яті створюється за допомогою екземпляра і html()викликається на ньому.

Це негарно, це витрачає трохи пам’яті, і я не уявляю, чи це настільки ретельно, як щось на зразок heбібліотеки, але якщо ви вже використовуєте jQuery, можливо, це варіант для вас.

Взято з допису в блозі Кодування HTML-об'єктів за допомогою jQuery від Фелікса Гейзендерферфа.


3
Щоб уникнути створення кожного вузла кожного разу, ви можете зберегти вузол: var converter=$("<div>");і пізніше використовувати його повторно: html1=converter.text(text1).html(); html2=converter.text(text2).html();...
FrancescoMM

1

Іноді потрібно просто закодувати кожен символ ... Ця функція замінює "все, але нічого" в regxp.

function encode(e){return e.replace(/[^]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}


1
Замінити ^на , .щоб зберегти смайлики: function encode(e){return e.replace(/[.]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}.
швейцарський містер

1

Отримайте підручник від Ourcodeworld Ourcodeworld - кодуйте та декодуйте HTML-сутності за допомогою JavaScript

Найголовніше - приклад бібліотеки

he.encode('foo © bar ≠ baz ???? qux');
// → 'foo &#xA9; bar &#x2260; baz &#x1D306; qux'

// Passing an `options` object to `encode`, to explicitly encode all symbols:
he.encode('foo © bar ≠ baz ???? qux', {
 'encodeEverything': true
});

he.decode('foo &copy; bar &ne; baz &#x1D306; qux');
// → 'foo © bar ≠ baz ???? qux'

Ця бібліотека, мабуть, полегшить ваше кодування та керує ним. Він популярний, регулярно оновлюється та відповідає специфікаціям HTML. Сам по собі не має залежностей, як це видно з пакета package.json


OP попросив ванільний JS, а ванільний JS пропонує element.innerText. Якщо бібліотека має перевагу, додайте її до своєї відповіді.
Рік,

0

Ось як я реалізував кодування. Я надихнувся наведеними вище відповідями.

function encodeHTML(str) {
  const code = {
      ' ' : '&nbsp;',
      '¢' : '&cent;',
      '£' : '&pound;',
      '¥' : '&yen;',
      '€' : '&euro;', 
      '©' : '&copy;',
      '®' : '&reg;',
      '<' : '&lt;', 
      '>' : '&gt;',  
      '"' : '&quot;', 
      '&' : '&amp;',
      '\'' : '&apos;'
  };
  return str.replace(/[\u00A0-\u9999<>\&''""]/gm, (i)=>code[i]);
}

// TEST
console.log(encodeHTML("Dolce & Gabbana"));
console.log(encodeHTML("Hamburgers < Pizza < Tacos"));
console.log(encodeHTML("Sixty > twelve"));
console.log(encodeHTML('Stuff in "quotation marks"'));
console.log(encodeHTML("Schindler's List"));
console.log(encodeHTML("<>"));


перерви для будь-якого вводу в \ u00A0- \ u9999, якого немає у вашому списку
Рік,

Поясніть, будь ласка, призначення mмодифікатора шаблону у шаблоні, який не має прив’язок.
mickmackusa

-1

Ви можете використовувати charCodeAt()метод, щоб перевірити, чи має вказаний символ значення, що перевищує 127, і перетворити його на цифровий посилальний символ за допомогою toString(16).


4
Було б чудово, якби ви могли додати трохи про магічне число 127та як / чому це працює;)
yckart

-1
replaceHtmlEntities(text) {
  var tagsToReplace = {
    '&amp;': '&',
    '&lt;': '<',
    '&gt;': '>',
  };
  var newtext = text;
  for (var tag in tagsToReplace) {
    if (Reflect.apply({}.hasOwnProperty, this, [tagsToReplace, tag])) {
      var regex = new RegExp(tag, 'g');
      newtext = newtext.replace(regex, tagsToReplace[tag]);
    }
  }
  return newtext;
}

-1

<!DOCTYPE html>
<html>
<style>
button {
backround: #ccc;
padding: 14px;
width: 400px;
font-size: 32px;
}
#demo {
font-size: 20px;
font-family: Arial;
font-weight: bold;
}
</style>
<body>

<p>Click the button to decode.</p>

<button onclick="entitycode()">Html Code</button>

<p id="demo"></p>


<script>
function entitycode() {
  var uri = "quotation  = ark __ &apos; = apostrophe  __ &amp; = ampersand __ &lt; = less-than __ &gt; = greater-than __ 	non- = reaking space __ &iexcl; = inverted exclamation mark __ &cent; = cent __ &pound; = pound __ &curren; = currency __ &yen; = yen __ &brvbar; = broken vertical bar __ &sect; = section __ &uml; = spacing diaeresis __ &copy; = copyright __ &ordf; = feminine ordinal indicator __ &laquo; = angle quotation mark (left) __ &not; = negation __ &shy; = soft hyphen __ &reg; = registered trademark __ &macr; = spacing macron __ &deg; = degree __ &plusmn; = plus-or-minus  __ &sup2; = superscript 2 __ &sup3; = superscript 3 __ &acute; = spacing acute __ &micro; = micro __ &para; = paragraph __ &middot; = middle dot __ &cedil; = spacing cedilla __ &sup1; = superscript 1 __ &ordm; = masculine ordinal indicator __ &raquo; = angle quotation mark (right) __ &frac14; = fraction 1/4 __ &frac12; = fraction 1/2 __ &frac34; = fraction 3/4 __ &iquest; = inverted question mark __ &times; = multiplication __ &divide; = division __ &Agrave; = capital a, grave accent __ &Aacute; = capital a, acute accent __ &Acirc; = capital a, circumflex accent __ &Atilde; = capital a, tilde __ &Auml; = capital a, umlaut mark __ &Aring; = capital a, ring __ &AElig; = capital ae __ &Ccedil; = capital c, cedilla __ &Egrave; = capital e, grave accent __ &Eacute; = capital e, acute accent __ &Ecirc; = capital e, circumflex accent __ &Euml; = capital e, umlaut mark __ &Igrave; = capital i, grave accent __ &Iacute; = capital i, acute accent __ &Icirc; = capital i, circumflex accent __ &Iuml; = capital i, umlaut mark __ &ETH; = capital eth, Icelandic __ &Ntilde; = capital n, tilde __ &Ograve; = capital o, grave accent __ &Oacute; = capital o, acute accent __ &Ocirc; = capital o, circumflex accent __ &Otilde; = capital o, tilde __ &Ouml; = capital o, umlaut mark __ &Oslash; = capital o, slash __ &Ugrave; = capital u, grave accent __ &Uacute; = capital u, acute accent __ &Ucirc; = capital u, circumflex accent __ &Uuml; = capital u, umlaut mark __ &Yacute; = capital y, acute accent __ &THORN; = capital THORN, Icelandic __ &szlig; = small sharp s, German __ &agrave; = small a, grave accent __ &aacute; = small a, acute accent __ &acirc; = small a, circumflex accent __ &atilde; = small a, tilde __ &auml; = small a, umlaut mark __ &aring; = small a, ring __ &aelig; = small ae __ &ccedil; = small c, cedilla __ &egrave; = small e, grave accent __ &eacute; = small e, acute accent __ &ecirc; = small e, circumflex accent __ &euml; = small e, umlaut mark __ &igrave; = small i, grave accent __ &iacute; = small i, acute accent __ &icirc; = small i, circumflex accent __ &iuml; = small i, umlaut mark __ &eth; = small eth, Icelandic __ &ntilde; = small n, tilde __ &ograve; = small o, grave accent __ &oacute; = small o, acute accent __ &ocirc; = small o, circumflex accent __ &otilde; = small o, tilde __ &ouml; = small o, umlaut mark __ &oslash; = small o, slash __ &ugrave; = small u, grave accent __ &uacute; = small u, acute accent __ &ucirc; = small u, circumflex accent __ &uuml; = small u, umlaut mark __ &yacute; = small y, acute accent __ &thorn; = small thorn, Icelandic __ &yuml; = small y, umlaut mark";
  var enc = encodeURI(uri);
  var dec = decodeURI(enc);
  var res = dec;
  document.getElementById("demo").innerHTML = res;
}
</script>

</body>
</html>


Здається, це не відповідає на запитання, і це лише кодова відповідь. Будь ласка, надайте опис того, що робить код, і як він пов’язаний із запитанням.
Рік,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.