2009-11-11 4 views
3

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

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

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

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

ответ

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" /> 
+0

Отлично, спасибо - я не знал, что встроенный jQuery ускользнул. –

0

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

+0

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

+0

Хотя я не отвечаю на этот вопрос напрямую. Однако @himadri указал на альтернативу, чтобы избежать кодирования и декодирования удовольствия. Нет необходимости в отрицательном голосовании. Думаю, мне показалось, что это полезно иметь £ Просто проголосовал за это, возможно, кто-нибудь, использующий Ajax с незашифрованным или простым HTML, воспользуется этим. Уважаю этого чувака !!! –

2

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

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

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

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

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

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

+0

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

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