Показать сообщение отдельно
  #1 (permalink)  
Старый 23.11.2013, 11:53
Аспирант
Отправить личное сообщение для revvo Посмотреть профиль Найти все сообщения от revvo
 
Регистрация: 17.01.2011
Сообщений: 38

Возврат JSON данных в русской кодировке
Помогите пожалуйста разобраться.

1. Кодировка HTML страницы - windows-1251.
2. Передаю запрос с помощью getJSON функции.
3. Запрос - одна заглавная русская буква.
4. В запросе она уходит в виде ?letter=%D0%90.
5. В PHP скрипте я ее обрабатываю так:
$first_letter = $_REQUEST['letter'];
	$first_letter = iconv("UTF-8", "WINDOWS-1251", $first_letter);

6. База по запросу:
$query = "select * from brands where name like '{$first_letter}%'";
возвращает результат, к-рый я пытаюсь вернуть обратно вот так:
echo json_encode($brands);

7. Если вторую строку в PHP коде выше убрать, база ничего не вернет, что наводит на вывод, что в базе все хранится в WINDOWS-1251 кодировке. Почему? Потому что это на Винде у меня установлено в Денвере? Что дает Collation? Сейчас установлен utf8_general_ci, при этом база находит и возвращает результат, хотя он передается в WINDOWS-1251, что мне кажется странным.
8. Основная проблема. После возврата результата, и вывода его на страницу с помощью jQuery, вот код:
var L = $(this).text();
			$.getJSON( 'get-brands.php', { letter: L }, function (data) {
				$(".brand_items").empty();
				if (data)
				$.each(data, function() {
					$(".brand_items").append('<li><span>'+this+'</span></li>');
				});
			});

на странице вместо русских слов вот такую хрень выводит:
[object Window]
[object Window]
В отладчике видно, что приходит масссив из null - [null, null].
Причем количество правильное, что говорит о том, что база все правильно находит, вот только как его, блин, в нормальный вид привести???

Разжевывать мне не надо, просто наведите на мысль. Заранее спасибо!!!

P.S. Пробовал вот такую функцию вместо стандартного json_encode, ничего не дает
function json_encode_cyr($str) {
$arr_replace_utf = array('\u0410', '\u0430','\u0411','\u0431','\u0412','\u0432',
'\u0413','\u0433','\u0414','\u0434','\u0415','\u0435','\u0401','\u0451','\u0416',
'\u0436','\u0417','\u0437','\u0418','\u0438','\u0419','\u0439','\u041a','\u043a',
'\u041b','\u043b','\u041c','\u043c','\u041d','\u043d','\u041e','\u043e','\u041f',
'\u043f','\u0420','\u0440','\u0421','\u0441','\u0422','\u0442','\u0423','\u0443',
'\u0424','\u0444','\u0425','\u0445','\u0426','\u0446','\u0427','\u0447','\u0428',
'\u0448','\u0429','\u0449','\u042a','\u044a','\u042b','\u044b','\u042c','\u044c',
'\u042d','\u044d','\u042e','\u044e','\u042f','\u044f');
$arr_replace_cyr = array('А', 'а', 'Б', 'б', 'В', 'в', 'Г', 'г', 'Д', 'д', 'Е', 'е',
'Ё', 'ё', 'Ж','ж','З','з','И','и','Й','й','К','к','Л','л','М','м','Н','н','О','о',
'П','п','Р','р','С','с','Т','т','У','у','Ф','ф','Х','х','Ц','ц','Ч','ч','Ш','ш',
'Щ','щ','Ъ','ъ','Ы','ы','Ь','ь','Э','э','Ю','ю','Я','я');
$str1 = json_encode($str);
$str2 = str_replace($arr_replace_utf,$arr_replace_cyr,$str1);
return $str2;
}

Последний раз редактировалось revvo, 23.11.2013 в 11:56.
Ответить с цитированием