[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не могу разобраться с xmlhttprequest + php
BlackByte
Сайт в кодировке cp1251. Со страницы отправляется запрос с помощью XMLHttpRequest к пхп скрипту. Он формирует данные и отправляет обратно. Первая страничка их выводит. Проблема в том, что в Хроме, ФФ и Опере всё работает отлично, но в IE приходит в такой форме: "￿￿ ￿￿".

Стоит отметь, что отдельно скрипт в IE(да и в других браузерах тоже) выводит отлично в кодировке UTF-8.

Помогите плз разобраться с проблемой.


function getapt(list)
{
temp = list;
var params = 'getap.php?list=' + (list);
xmlhttp.open("GET", params, true);
xmlhttp.onreadystatechange = stch;

xmlhttp.send(null);
};

function stch() {
if (xmlhttp.readyState == 4 || xmlhttp.readyState=="complete") {
var resp = xmlhttp.responseText;
document.getElementById(temp).innerHTML = resp + '<div class="clear" onclick="this.parentNode.innerHTML = \'\';">Закрыть</div>';
}
}
;
Valick
Цитата
Сайт в кодировке cp1251

что мешает перейти на UTF-8 ?

_____________
Стимулятор ~yoomoney - 41001303250491
BlackByte
То, что основной сайт весь в cp1251, а страница лишь лишь вставляется в сайт. (include'ом верх и низ прилепляется). Делал бы сайт я изначально, ставил бы utf-8, а тут приходится в этих условиях выживать. Я вот не понимаю, почему везде работает, а IE фигню выдает.
killer8080
попробуй заголовок добавить с кодировкой, в скрипте где аякс обрабатывается
header('Content-Type: text/html; charset=WINDOWS-1251');
BlackByte
Пробовал...
переменная, которая передается, всё равно остается в utf-8. Вот так она собирается:

$out='<table border="1" cellpadding="2" cellspacing="0" width="70%">';
while ($tablerows = mysql_fetch_row($sql))
{
$out.='<tr><td bgColor=#ebebeb colspan="2">'.$tablerows[0].'</td></tr>';
$out.='<tr><td width="35%">Адрес:</td><td>'.$tablerows[1].'</td></tr>';
$out.='<tr><td width="35%">Телефон:</td><td>8-'.$tablerows[2].'-'.$tablerows[3].'</td></tr>';
}
$out.='</table>';
mysql_close($db);
echo $out;


Меняя кодировку в хидере, переменная всё равно остается в UTF-8.

А из-за чего проблема в IE может быть??
killer8080
Как вариант, заэскейпь текст перед передачей, на стороне клиента unescape.
Вот аналог функции escape для PHP
function js_urlencode($str) { 
$str = mb_convert_encoding($str, 'UTF-16', 'windows-1251');
$out = '';

for ($i = 0; $i < mb_strlen($str, 'UTF-16'); $i++) {
$out .= '%u'.bin2hex(mb_substr($str, $i, 1, 'UTF-16'));
}

return $out;
}
BlackByte
а для чего на строне клиента?? на клиенте пхп нету... клиент отсылает данные и принимает с помощью js. Причем посылка в порядке, а вот с приемом проблема.
BlackByte
А, я понял мысль... Я кодирую в URI то, что хочу получить с скрипта и расшифровываю на клиенте в js.

с твоей функцией получается Uncaught URIError: URI malformed. С urlencode из php тае фигня при декодировании...
killer8080
на стороне сервера
echo js_urlencode($out);

на клиенте
var resp = unescape(xmlhttp.responseText);
BlackByte
СПасибо огромное. Осталось разобраться с кодировками обращения к базе и будет норм))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.