Принудительно отображать текст из Юникода в поле ввода

Мы выполняем вызов AJAX для извлечения из базы данных. Поскольку наши клиенты могут использовать разные языки, мы кодируем все в Unicode для хранения в базе данных (избавляет от беспокойства о сопоставлениях и т. Д.). Теперь, когда мы получаем такой контент для отображения в текстовом поле ввода, он отображает коды Unicode. Проверил документацию HTML 4 для ввода, и значение равно CDATA, который сообщает мне, что эти Unicode должны отображаться как их персонаж.
Из приложенного снимка экрана видно, что это не так. Мне интересно, есть ли способ «заставить» такое поведение.

alt text


person Purefan    schedule 22.09.2010    source источник
comment
Лучший способ принудительно ввести допустимые символы - использовать соответствующую кодировку - UTF8. Понимаете, сейчас 2010 год.   -  person naivists    schedule 22.09.2010
comment
Приношу свои извинения, это не ASCII, это юникод. И да, я знаю, что сейчас 2010 год, и что мы живем на планете Земля, спасибо.   -  person Purefan    schedule 22.09.2010
comment
Вы путаете Unicode с объектами HTML.   -  person BalusC    schedule 24.09.2010
comment
ой, ну отбросив соглашения об именах, проблема остается, есть идеи?   -  person Purefan    schedule 27.09.2010


Ответы (2)


Поскольку наши клиенты могут использовать разные языки, мы кодируем все в ascii для хранения в базе данных (избавляет от беспокойства о сопоставлениях и т. Д.).

IMHO хранение html-сущностей в базе данных - очень плохой подход. Я настоятельно рекомендую вам везде использовать кодировку UTF-8. Это то, что избавит вас от беспокойства о сопоставлениях и тому подобном.

person Darin Dimitrov    schedule 22.09.2010
comment
Приношу свои извинения, это не ASCII, это юникод. - person Purefan; 22.09.2010

Вы передаете строку JavaScript, полную &#...; ссылок на числовые символы. Строки JavaScript не кодируются в формате HTML, поэтому ваш код действительно создает строку JS, содержащую амперсанд, хеш и т. Д.

Когда вы устанавливаете его как входное значение DOM (val()), естественно, эти амперсанды все еще будут там. Свойства DOM - это простые строки, а не разметка. Вам нужно только HTML-кодировать строки в JavaScript, если вы собираетесь сделать из них разметку для использования с _3 _ / _ 4_.

Таким образом, PHP не должен кодировать HTML-контент, который не будет вставлен в HTML. Используйте json_encode() для создания строковых литералов JavaScript:

$('#js_global_status_input').val(<?php echo json_encode($status_value); ?>);
person bobince    schedule 22.09.2010
comment
Большое спасибо за ваше время и предложение, однако это не сработало на моей стороне, вот ответ ajax: $ (# js_status_input) .val (מה בראש שלך?); который использует json_encode - person Purefan; 28.09.2010
comment
Вы все еще передаете амперсанды, хеши и все такое. Не делайте этого, они не имеют никакого значения, кроме разметки. val() не является разметкой, вам необходимо передать обычную незакодированную строку: val('מה בראש שלך') или, если она экранирована для обеспечения безопасности ASCII в строке JSON (что json_encode будет делать по умолчанию), val("\u05de\u05d4 \u05d1\u05e8\u05d0\u05e9 \u05e9\u05dc\u05da"). Вам нужно заставить свой серверный скрипт прекратить HTML-кодирование значения, которое он выплевывает. - person bobince; 28.09.2010
comment
Если в вашей базе данных действительно есть &#1502;&#1492;..., то у вас большие проблемы. Хотя вы можете попытаться исправить эту неисправность, вызвав html_entity_decode($s, ENT_QUOTES, 'utf8') в PHP, наличие HTML-кодированного текста в вашей базе данных является верным признаком того, что ваше приложение делает что-то очень неправильное, например, HTML-кодирование всего ввода, вместо того, чтобы кодировать его на этапе вывода. . Содержимое базы данных должно всегда храниться в необработанном текстовом виде. - person bobince; 28.09.2010