2012-05-19 2 views
2

Я просто не понимаю.UTF-8 в HTML-сообщении, добавленном JavaScript

Мое дело в том, что мое приложение отправляет весь необходимый текст GUI JSON при запуске страницы с моего PHP-сервера. На моем сервере PHP у меня есть все специальные символы текста, написанные в UTF-8. Пример: Für

Так что на стороне клиента у меня точно такое же значение, и оно хорошо отображается везде, кроме полей ввода. Когда я делаю это с помощью JavaScript:

document.getElementById('myInputField').value = "FÖr"; 

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

Я понял что-то неправильно в концепциях UTF-8?

Спасибо за любые подсказки.

ответ

4

Обозначение ü не имеет ничего общего с UTF-8. Использование ссылок на символы является распространенным способом , избегая необходимости использования UTF-8; они могут использоваться с любой кодировкой, но если вы используете UTF-8, вам они не нужны.

Обозначение ü - это нотация HTML, а не JavaScript. Является ли он интерпретируется правилами HTML, когда он появляется внутри вашего JavaScript-кода, зависит от контекста (например, JavaScript внутри HTML-документа или отдельного файла JavaScript). Эту проблему лучше избегать, используя либо символы как таковые, либо используя JavaScript обозначения для символов.

Например, ü означает то же, что и ü, то есть U + 00FC, ü (u с диарезом). Обозначение JavaScript для использования внутри строковых литералов для этого - \u00fc (\u, за которым следует ровно четыре шестнадцатеричных цифры). Например, следующее устанавливает значение «Fur»:

document.getElementById('myInputField').value = "F\u00fcr"; 
2

Вы используете, Что называется HTML entities для кодирования символов, которые он не такой же, как UTF-8, но, конечно же, строка UTF-8 может включать в себя HTML сущности.

Я думаю, проблема заключается в том, что атрибуты тегов не могут включать объекты HTML, поэтому при назначении атрибута значения ввода текста вам нужно использовать некоторую другую кодировку. Я думаю, у вас есть два варианта:

Декодировать объект HTML на стороне клиента. Очень уродливое решение для контрейдера на декодере, доступном в браузере (im, использующий jQuery в примере, но вы, вероятно, получите точку).

inputElement.value = $("<p/>").html("F&#214;r").text(); 

Другой вариант, который думаю, лучше, чтобы не отправлять HTML сущности в ответе сервера, но вместо того, чтобы использовать правильную кодировку UTF-8 для всех символов, которые должны работать нормально, если положить в текстовые узлы или атрибуты тега. Это предполагает, что HTML-страница, конечно, использует кодировку UTF-8.

+0

Я считал, что использую соответствующие коды UTF-8 при передаче "&...;"? – Chris

+0

Да, это правильно UTF-8, но 'Ö' не волшебным образом превратится в «...» только потому, что в него входит кодировка UTF-8. В вашем случае он превращается в «...», как только вы добавляете строку в текстовый узел DOM, который будет выполнять декодирование объектов HTML для вас. –

Смежные вопросы