Как мне хранить и получать британские фунты? - PullRequest
3 голосов
/ 11 ноября 2009

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

Проблема: пользователь вводит символ английского фунта (£) в текстовое поле в CMS. Они нажимают «сохранить», и значение поля формы экранируется с помощью функции JavaScript escape() и отправляется с запросом jQuery AJAX POST. Однако в какой-то момент символ фунта становится знаком вопроса (неправильная кодировка символов?).

Я не могу просто преобразовать символ в его HTML-сущность перед сохранением в базу данных, потому что когда значения извлекаются для отображения на переднем крае веб-сайта, они кодируются в формате HTML (поэтому сущность будет отображаться как есть. ).

Чтобы раз и навсегда выяснить это, что должен я здесь делаю?

Ответы [ 3 ]

4 голосов
/ 11 ноября 2009

Вам не нужно использовать функцию escape. jQuery уже обрабатывает кодировку:

$.ajax({
    url: '/somepage',
    data: { param1: $('#textfield').val() },
    success: function() { }
});

Просто убедитесь, что ваше приложение настроено на кодировку UTF-8:

<system.web>
    <globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>

И HTML-страницы также:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
2 голосов
/ 11 ноября 2009

значение поля формы экранируется с помощью функции escape () JavaScript

Вот твоя проблема. escape - неправильный способ создания значений параметров URL, и в общем случае никогда не следует использовать . Вы ищете encodeURIComponent, который делает это правильно. * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * [9

Если вы используете jQuery, как вы упомянули, вам никогда не нужно создавать строку данных POST вручную; просто перейдите к поиску, подобному {x: '£'}, и он позаботится о кодировке для вас.

Возможны и другие проблемы с хранением и получением £, если ваше приложение не настроено для корректной обработки Юникода. В идеале вы должны обслуживать свои страницы как UTF-8 и использовать ввод-вывод UTF-8, как упомянуто Дарином, плюс использовать NATIONAL символов (NVARCHAR) для хранения строк Unicode в SQL Server.

Я не могу просто преобразовать символ в его HTML-сущность перед сохранением в базу данных, потому что, когда значения извлекаются для отображения на переднем крае веб-сайта, они кодируются в HTML

Хорошо! Это абсолютно правильно. Вы никогда не должны хранить данные в кодировке HTML в базе данных, это совершенно неправильный способ справиться с проблемами выхода. Продолжайте HTML-кодирование всего текста, выводимого на вывод.

0 голосов
/ 11 ноября 2009

Попробуйте сохранить символ британского фунта как & pound; , чтобы при отображении в ответе html отображался символ британского фунта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...