Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проблема с кодировкой кирилицы внутри скрипта (https://javascript.ru/forum/jquery/9094-problema-s-kodirovkojj-kirilicy-vnutri-skripta.html)

GRIG 28.04.2010 18:03

Проблема с кодировкой кирилицы внутри скрипта
 
Привет всем. Помогите решить такую проблему.
На странице есть форма для ввода фильтров для поискового запроса. Среди прочего в этой форме есть такой кусок:
<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-Р. Откуда тут берется виндовая кодировка - совершенно непонятно.
Есть какие-нибудь идеи?

Gvozd 28.04.2010 18:12

Цитата:

Сообщение от GRIG
При генерации строки-запроса для передачи на сервер эти буквы копируются "как есть" (проверял в отладчике)

неправда.на сервер передаются уже кодированные данные
Цитата:

Сообщение от GRIG
преобразование ведется соответственно виндовой кодировке,

неправда. URL кодируется согласно UTF-8,насоклько я знаю всегда

GRIG 28.04.2010 18:30

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

2. Конкретно в моем случае - по виндовой. Увы, это экспериментальный факт.

GRIG 28.04.2010 19:04

UPD: Забыл написать один важный момент. Отправка формы на сервер производится средствами AJAX'а. А точнее с помощью вызова $.getJSON(...);

Gvozd 28.04.2010 21:33

используйте явный UTF повсюду, и не парьте себе мозги

GRIG 29.04.2010 09:23

Не могу. Речь идет об интранете, в котором КОИ8-Р - корпоративный стандарт.

subzey 29.04.2010 09:49

GRIG,
Сочувствую.

GRIG 29.04.2010 10:04

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.
ВОПРОС: какого черта?????

Gvozd 29.04.2010 10:41

глянь как в библиотеке URL-кодируется параметр
посмотри стандартные URL-кодировщики
а потом если все не катит, напиши свой URL_кодер с блек-джеком, шлюхами, и KOI8-R

GRIG 29.04.2010 10:49

А где это смотреть?


Часовой пояс GMT +3, время: 17:07.