Навигатор сайта : Разделы Информационные технологии AJAX и русские буквы - проблема с кодировкой

AJAX и русские буквы - проблема с кодировкой

Если Вы используете в своем приложении AJAX, то неизбежно возникнут проблемы с кодировкой при передаче в параметрах запроса русских букв независимо от метода (GET или POST).

Я предлагаю универсальное решение этой проблемы.

Для начала необходимо в JavaScript-e "преобразовать" Вашу переменную (пусть это будет var) функцией encodeURIComponent(), например encodeURIComponent(var)

 

Метод encodeURIComponentпреобразовывает все символы, кроме: символов латинского алфавита, десятичных цифр и

- _ . ! ~ * ' ( )
.

 

Далее в коде php осуществляем разбор значения принимаемой переменной. Далее ход действий зависит от кодировки Вашего сайта (в которой посетитель отправляет русские буквы). Если это UTF-8, то код будет выглядеть:

Код:

preg_replace('/%([0-9a-f]{2})/ie', "chr(hexdec('\\1'))", $_REQUEST['var'])

 

Если же это кодировка Windows, т.е. cp1251, то необходимо дополнительное преобразование из UTF-8 в cp1251:

Код:

iconv('utf-8','cp1251',preg_replace('/%([0-9a-f]{2})/ie', "chr(hexdec('\\1'))", $_REQUEST['var']))

Комментарии  

 
+1 # так держать ;)Guest 11.01.2013 19:00
Спасибо :roll: большое понятно и доходчиво только надо бы предупредить о том что это всё должно переприсваивать ся переменой var иначе могут не понять ;-)
Цитировать | Сообщить модератору
 
 
0 # RE: AJAX и русские буквы - проблема с кодировкойGuest 27.03.2013 03:11
Везде пишут о передаче данных из Javascript в PHP. А как быть с данными, которые возвращаются из PHP в яваскрипт?
Цитировать | Сообщить модератору
 
 
0 # RE: AJAX и русские буквы - проблема с кодировкойEcolora 27.03.2013 04:04
Попробуйте для этих целей: decodeURICompon ent и decodeURI. И вот этот вариант:

encode(decodeUR I(VAR_FROM_PHP) )

где функция encode это:

function encode(sValue) {
var text = "", Ucode, ExitValue, s;
for (var i = 0; i < sValue.length; i++) {
s = sValue.charAt(i);
Ucode = s.charCodeAt(0);
var Acode = Ucode;
if (Ucode > 1039 && Ucode < 1104) {
Acode -= 848;
ExitValue = "%" + Acode.toString(16);
}
else if (Ucode == 1025) {
Acode = 168;
ExitValue = "%" + Acode.toString(16);
}
else if (Ucode == 1105) {
Acode = 184;
ExitValue = "%" + Acode.toString(16);
}
else if (Ucode == 32) {
Acode = 32;
ExitValue = "%" + Acode.toString(16);
}
else if (Ucode == 10){
Acode = 10;
ExitValue = "%0A";
}
else {
ExitValue = s;
}
text = text + ExitValue;
}
return text;
}
Цитировать | Сообщить модератору
 

Добавить комментарий


Защитный код
Обновить

Счетчик определения тИЦ и PR Яндекс.Метрика

для детей старше 12 лет