Мы выполняем вызов AJAX для извлечения из базы данных. Поскольку наши клиенты могут использовать разные языки, мы кодируем все в Unicode для хранения в базе данных (избавляет от беспокойства о сопоставлениях и т. Д.). Теперь, когда мы получаем такой контент для отображения в текстовом поле ввода, он отображает коды Unicode. Проверил документацию HTML 4 для ввода, и значение равно CDATA, который сообщает мне, что эти Unicode должны отображаться как их персонаж.
Из приложенного снимка экрана видно, что это не так. Мне интересно, есть ли способ «заставить» такое поведение.
Принудительно отображать текст из Юникода в поле ввода
Ответы (2)
Поскольку наши клиенты могут использовать разные языки, мы кодируем все в ascii для хранения в базе данных (избавляет от беспокойства о сопоставлениях и т. Д.).
IMHO хранение html-сущностей в базе данных - очень плохой подход. Я настоятельно рекомендую вам везде использовать кодировку UTF-8. Это то, что избавит вас от беспокойства о сопоставлениях и тому подобном.
Вы передаете строку 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); ?>);
val()
не является разметкой, вам необходимо передать обычную незакодированную строку: val('מה בראש שלך')
или, если она экранирована для обеспечения безопасности ASCII в строке JSON (что json_encode
будет делать по умолчанию), val("\u05de\u05d4 \u05d1\u05e8\u05d0\u05e9 \u05e9\u05dc\u05da")
. Вам нужно заставить свой серверный скрипт прекратить HTML-кодирование значения, которое он выплевывает.
- person bobince; 28.09.2010
מה...
, то у вас большие проблемы. Хотя вы можете попытаться исправить эту неисправность, вызвав html_entity_decode($s, ENT_QUOTES, 'utf8')
в PHP, наличие HTML-кодированного текста в вашей базе данных является верным признаком того, что ваше приложение делает что-то очень неправильное, например, HTML-кодирование всего ввода, вместо того, чтобы кодировать его на этапе вывода. . Содержимое базы данных должно всегда храниться в необработанном текстовом виде.
- person bobince; 28.09.2010