Alt атрибут кодирования с помощью JavaScript - PullRequest
8 голосов
/ 05 мая 2010

HTML-сущности должны быть закодированы в атрибуте alt изображения на странице HTML. Так

<img id="formula" alt="A &rarr; B" src="formula.png" />

будет хорошо работать.

С другой стороны, тот же код JavaScript не будет работать

document.getElementById('formula').alt = 'A &rarr; B';

и будет производить A & rarr; B вместо A & rarr; B .

Как это сделать с помощью JavaScript, когда невозможно вставить специальные (некодированные) символы в исходный код?

Ответы [ 4 ]

7 голосов
/ 05 мая 2010

JavaScript имеет собственную систему экранирования специальных символов в строках:

document.getElementById('formula').alt = 'A \u2192 B';
1 голос
/ 05 мая 2010
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Decode HTML entities using JavaScript</title>
  </head>
  <body>
    <img id="formula" src="vote-arrow-up-on.png" alt="A &rarr; C">
    <script>
      function html_entity_decode(str) {
        var p = document.createElement("p");
        p.innerHTML = str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
        return p.innerHTML;
      }

      var theValue = html_entity_decode('A &rarr; B');
      document.getElementById('formula').title = theValue;
    </script>
  </body>
</html>

Кредиты Источник JavaScript .

EDIT: Я изменил исходный код, чтобы использовать innerHTML только для элемента <p> вместо innerHTML и value для <textarea>.

1 голос
/ 05 мая 2010

Вот альтернатива, если вы не можете сохранить свой файл в формате Unicode:

function decodeHTML(str) {
    return str.replace(/&#(\d+);?/g, function() {
        return String.fromCharCode(arguments[1])
    });
}

Однако для этого необходимо использовать числовое представление. В этом случае &#8594;.

0 голосов
/ 05 мая 2010

В этом конкретном случае вам не нужно кодировать специальные символы HTML в JavaScript.

Валидатор W3C не должен жаловаться на это (только что проверил), и документ должен пройти валидацию. Если не выложите свой код и я обновлю свой ответ.

...