Тема: xmlhttprequest.ru
Показать сообщение отдельно
  #2 (permalink)  
Старый 19.04.2009, 16:14
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Все очень просто, в JavaScript все строки кодируются в UTF-8. Другими словами, в JavaScript ведется работа только с этой кодировкой, независимо от того, какой кодировки документ. Поэтому и данные, отправляемые XMLHTTPRequest должны быть в этой кодировке (исключая баг ie6).

Проверить это достаточно просто:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
header('Content-type: text/html; codepage=windows-1251');
?>
<html>
	<head>
		<meta http-equiv="Content-type" content="text/html;codepage=windows-1251" />
		<script	type="text/javascript">
		request = new XMLHttpRequest();
		request.open("POST", "/?var=привет_я_строка_в_утф", true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				if (request.status == 200) {
					alert(request.responseText);
				}
			}
		};
		request.send(null);
		</script>
	</head>
</html>
<?
} else {
	header('Content-type: text/html; codepage=windows-1251');
	echo iconv('UTF-8', 'cp1251', $_GET['var']); // привет_я_строка_в_утф
}
?>


Порядок примерно такой:
1. Код скрипта JavaScript перед выполнением кодируется из кодировки документа в UTF-8.
2. Через XMLHTTPRequest строка UTF-8 "/?var=привет_я_строка_в_утф" передается на сервер.
3. На сервере переменная $_GET['var'] имеет кодировку UTF-8, перекодируется в cp1251 и возвращается.
4. В возвращенном результате опять происходит перекодирование из кодировки документа в UTF-8.

П.С:
Я могу ошибаться, я не могу сказать, что уверен в этом механизме работы, если я не прав, пусть меня поправят

Последний раз редактировалось Андрей Параничев, 19.04.2009 в 16:26.
Ответить с цитированием