Как мне хранить и получать символы британского фунта?

Asked
Viewd2107

3

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

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

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

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

3 ответов

4

Вам не нужно использовать функцию 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

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

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

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

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

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

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

  • Спасибо - если бы я мог принять два ответа, я бы принял и этот.

    Mark Bell11 ноября 2009, 11:55
0

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

  • Как я уже сказал в вопросе, я не могу этого сделать, потому что вывод закодирован HTMLEncoded.

    Mark Bell11 ноября 2009, 10:56
  • Хотя и не отвечаю на этот вопрос напрямую[email protected], однако, указал на альтернативу, чтобы избежать удовольствия от кодирования и декодирования.Нет необходимости в голосовании против.Думаю, мне было полезно иметь £ Просто проголосовали за него, возможно, кто-то, использующий Ajax с некодированным или простым HTML, воспользуется этим.Уважаю этого чувака .. !!!

    Clain Dsilva11 марта 2014, 04:19