Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как добавить Юникод строку в HTML через JavaScript? (https://javascript.ru/forum/misc/54392-kak-dobavit-yunikod-stroku-v-html-cherez-javascript.html)

Armen 15.03.2015 20:36

Как добавить Юникод строку в HTML через JavaScript?
 
Здравствуйте, подскажите пожалуйста.
Символ & в Юникоде равен "&" + "#38;", если я напрямую вписываю его в html:
<div id="div" title="&#38;"></div>

То в итоге я получаю вот такой результат:
<div id="div" title="&"></div>

Все супер! НО!
Если я хочу добавить юникод с помощью js:
var div = document.getElementById('div');
div.setAttribute('title', "&#38;");

То результат получается вот такой:
<div id="div" title="&#38;"></div>

Почему так? Как сделать так, чтоб при добавлении юникода в html с помощью js результат был:
<div id="div" title="&"></div>

Спасибо за помощь и ваше время.

рони 15.03.2015 20:43

http://unicode-table.com/ru/search/?q=%26
юникод & -> \u0026

Armen 15.03.2015 20:46

Цитата:

Сообщение от рони (Сообщение 361378)

А можно подробнее? Как мне получить \u0026 ?

рони 15.03.2015 20:49

Armen,
div.setAttribute('title', "\u0026");
:-?

Armen 15.03.2015 21:00

Цитата:

Сообщение от рони (Сообщение 361381)
Armen,
div.setAttribute('title', "\u0026");
:-?

Это если у меня всегда будет &, но у меня будет функция, которая будет принимать строку, а строка может быть разная и эта функция будет вставлять уже закодированные данные из этой строки в html.
& я привел только в качестве примера, но на самом деле может быть любой символ

рони 15.03.2015 21:07

Armen,
пишите как есть -- в чём проблема то?

Armen 15.03.2015 21:21

Цитата:

Сообщение от рони (Сообщение 361383)
Armen,
пишите как есть -- в чём проблема то?

Еще раз.
Должна быть функция, которая на входе получает строку, напирмер "HELLO" - эту строку она обрабатывает и кодирует в Unicode после чего добавляет в title атрибут, в итоге должно получиться
<div title="HELLO">

рони 15.03.2015 21:27

Цитата:

Сообщение от Armen
и кодирует в Unicode

зачем это нужно делать мне непонятно -- что будет в строке то и будет в title без всякой кодировки

Armen 15.03.2015 21:33

Цитата:

Сообщение от рони (Сообщение 361387)
зачем это нужно делать мне непонятно -- что будет в строке то и будет в title без всякой кодировки

Да какая разница зачем? Вот нужно так, если не знаете, как помочь, то зачем такие вопросы задавать?

рони 15.03.2015 21:38

Armen,
ок подождём гуру, который и вам поможет и я смогу узнать в чём была ваша проблема.

Armen 15.03.2015 21:47

Цитата:

Сообщение от рони (Сообщение 361389)
Armen,
ок подождём гуру, который и вам поможет и я смогу узнать в чём была ваша проблема.

Ладно, пока ждем я объясню.
С сервера приходит строка, чтобы обезопасить сайт от xss(ведь кто знает, что мне сервер может прислать, это может быть и javascript), который если я вставлю в свой элемент, он же атрибут, то будет ой как не хорошо.
Вот я и хочу закодировать символы, которые будут приходить с сервера и при этом отображаться корректно в атрибутах.
Кстати, как вариант - можно использовать hex, то есть:
var hex = '&'.charCodeAt().toString(16); // 26
div.setAttribute('title', "\x" + hex); // error
div.setAttribute('title', "\x26"); // СУПЕР

Как видите, я не могу писать так "\x" + hex сразу ошибка.

Armen 15.03.2015 22:20

А вот и решение, может кому-то пригодится
var hex = '&'.charCodeAt().toString();
div.setAttribute('title', String.fromCharCode(hex));

bes 15.03.2015 22:25

Цитата:

Сообщение от Armen
Да какая разница зачем? Вот нужно так, если не знаете, как помочь, то зачем такие вопросы задавать?

потому что ты наверное плохо объясняешь, неужели не понятно?

Цитата:

Сообщение от Armen
А вот и решение, может кому-то пригодится
var hex = '&'.charCodeAt().toString();
div.setAttribute('title', String.fromCharCode(hex));

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

Armen 15.03.2015 22:36

Цитата:

Сообщение от bes (Сообщение 361392)
потому что ты наверное плохо объясняешь, неужели не понятно?


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

придет с сервера вот такая штука <script>alert("xss")</script>

bes 15.03.2015 23:53

Цитата:

Сообщение от Armen
придет с сервера вот такая штука <script>alert("xss")</script>

пришёл, ты вставил это в атрибут или даже в innerHTML, скрипт исполнился?

laimas 16.03.2015 03:05

придет с сервера вот такая штука <script>alert("xss")</script>

Без вашего ведома такое вообще-то с сервера никак не может прийти, если же приходит значит вы не контролируете ситуацию на нем.
Другой случай, это уже атаки типа "человек по середине", но превращать нужно не символы в unicod, а "опасные" символы в html-сущности <, >, &.


Часовой пояс GMT +3, время: 22:07.