Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.04.2010, 18:03
Аспирант
Отправить личное сообщение для GRIG Посмотреть профиль Найти все сообщения от GRIG
 
Регистрация: 26.03.2010
Сообщений: 55

Проблема с кодировкой кирилицы внутри скрипта
Привет всем. Помогите решить такую проблему.
На странице есть форма для ввода фильтров для поискового запроса. Среди прочего в этой форме есть такой кусок:
<select id="my_select">
  <option value="default">Default</option>
</select>

После того, как страница загружена в броузер, срабатывает скрипт, который средствами AJAX'а подгружает другие варианты для этого select'а. При этом делается следующее:
for( var i = 0; i < data.n; i++ )
  $('#my_select').append( '<option>' + data.selections[i] + '</option>' );

А потом пользоваетель как-то инициирует отправку формы на сервер. При этом генерится строка для передачи на сервер методом GET. Для указанного куска делается следующее:
form_data += "&" + send_form.elements[i].id + "=" + send_form.elements[i][ send_form.elements[i].selectedIndex ].value;

Неприятность заключается в следующем. Подгруженные варианты выбора могут содержать в себе русские буквы. При генерации строки-запроса для передачи на сервер эти буквы копируются "как есть" (проверял в отладчике). Однако потом они как-то преобразуются в конструкцию вида "%C1%C2%C3..." Преобразовать, естественно, надо, поскольку не все символы допустимы в URL'е. Но прикол в том, что это преобразование ведется соответственно виндовой кодировке, хотя сервер все данные (и исходную страницу, и последующие варианты выбора) присылает в КОИ8-Р. Да и броузер живет на линухе, который русифицирован в кодировке КОИ8-Р. Откуда тут берется виндовая кодировка - совершенно непонятно.
Есть какие-нибудь идеи?
Ответить с цитированием
  #2 (permalink)  
Старый 28.04.2010, 18:12
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от GRIG
При генерации строки-запроса для передачи на сервер эти буквы копируются "как есть" (проверял в отладчике)
неправда.на сервер передаются уже кодированные данные
Сообщение от GRIG
преобразование ведется соответственно виндовой кодировке,
неправда. URL кодируется согласно UTF-8,насоклько я знаю всегда
Ответить с цитированием
  #3 (permalink)  
Старый 28.04.2010, 18:30
Аспирант
Отправить личное сообщение для GRIG Посмотреть профиль Найти все сообщения от GRIG
 
Регистрация: 26.03.2010
Сообщений: 55

1. Данные на сервер действительно передаются уже перекодированными. Но перекодировка происходит уже после того, как мой скрипт отдал данные для отсылки.

2. Конкретно в моем случае - по виндовой. Увы, это экспериментальный факт.
Ответить с цитированием
  #4 (permalink)  
Старый 28.04.2010, 19:04
Аспирант
Отправить личное сообщение для GRIG Посмотреть профиль Найти все сообщения от GRIG
 
Регистрация: 26.03.2010
Сообщений: 55

UPD: Забыл написать один важный момент. Отправка формы на сервер производится средствами AJAX'а. А точнее с помощью вызова $.getJSON(...);
Ответить с цитированием
  #5 (permalink)  
Старый 28.04.2010, 21:33
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

используйте явный UTF повсюду, и не парьте себе мозги
Ответить с цитированием
  #6 (permalink)  
Старый 29.04.2010, 09:23
Аспирант
Отправить личное сообщение для GRIG Посмотреть профиль Найти все сообщения от GRIG
 
Регистрация: 26.03.2010
Сообщений: 55

Не могу. Речь идет об интранете, в котором КОИ8-Р - корпоративный стандарт.
Ответить с цитированием
  #7 (permalink)  
Старый 29.04.2010, 09:49
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

GRIG,
Сочувствую.
Ответить с цитированием
  #8 (permalink)  
Старый 29.04.2010, 10:04
Аспирант
Отправить личное сообщение для GRIG Посмотреть профиль Найти все сообщения от GRIG
 
Регистрация: 26.03.2010
Сообщений: 55

UPD. Экспериментальным путем (с помощью модификации скриптов и отладчика FireBug) установлено следующее:
Если для отсылки формы на сервер применяется код
window.location = 'myscript.php?page=1' + form_data;

То буквы "СЭБ" из того списка выбора преобразуются в "%F3%FC%E2", что соответствует кодировке KOI8-R
Если же для отсылки формы на сервер применяется код
$.getJSON( 'myscript.php?page=1' + form_data, { }, myfunc() );

То те же самые буквы преобразуются в "%D1%DD%C1", что соответствует кодировке win-1251.
ВОПРОС: какого черта?????
Ответить с цитированием
  #9 (permalink)  
Старый 29.04.2010, 10:41
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

глянь как в библиотеке URL-кодируется параметр
посмотри стандартные URL-кодировщики
а потом если все не катит, напиши свой URL_кодер с блек-джеком, шлюхами, и KOI8-R
Ответить с цитированием
  #10 (permalink)  
Старый 29.04.2010, 10:49
Аспирант
Отправить личное сообщение для GRIG Посмотреть профиль Найти все сообщения от GRIG
 
Регистрация: 26.03.2010
Сообщений: 55

А где это смотреть?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с кодировкой nikolaich ExtJS 9 04.02.2010 13:30
проблема с кодировкой bushstas AJAX и COMET 7 03.10.2009 00:48
Проблема с кодировкой в скрипте автозаполнения Maratka AJAX и COMET 12 24.01.2009 12:31
Проблема с кодировкой magistr_bender Общие вопросы Javascript 2 07.09.2008 20:04
Проблема с кодировкой. SunYang Общие вопросы Javascript 12 05.08.2008 14:40