[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: И снова кодировка для Ajax
barcelona
Здравствуйте!
Проблема стара как мир, но от этого легче не становится. Итак: я отправляю данные со страницы следующим образом:

Код
function sendRequest() {
            var oForm = document.forms[0];
            var sBody = getRequestBody(oForm);
           //создание объекта XmlHttp
            var oXmlHttp = zXmlHttp.createRequest();
            oXmlHttp.open("post", oForm.action, true);
            oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            
            oXmlHttp.onreadystatechange = function () {
                if (oXmlHttp.readyState == 4) {
                    if (oXmlHttp.status == 200) {
                        saveResult(oXmlHttp.responseText);
                    } else {
                        saveResult("Ошибка: " + oXmlHttp.statusText);
                    }
                }            
            };
            oXmlHttp.send(sBody);        
        }
        
        function getRequestBody(oForm) {
            var aParams = new Array();
            
            for (var i=0; i < oForm.elements.length; i++) {
                var sParam = encodeURIComponent(oForm.elements[i].name);
                sParam += "=";
                sParam += encodeURIComponent(oForm.elements[i].value);
                aParams.push(sParam);
            }
            
            return aParams.join("&");        
        }
        
        function saveResult(sMessage) {
            var divStatus = document.getElementById("divLoading");
            divStatus.innerHTML = sMessage;
        }


т.е. получаю данные от формы, кодирую их в utf-8 с помощью encodeURIComponent и отправляю php-скрипту. Тот в ответ посылает ответ (всегда на русском языке) с помощью переменной $fehler. Вот тут-то самое интересное: Opera и Mozilla выводят этот ответ нормально, а вот IE показывает мне знаки вопроса. Если перед отправкой я пытаюсь перекодировать мой $fehler с помощью iconv('WINDOWS-1251','UTF-8',$fehler ) ситуация меняется на противоположную. Знаю, что вопрос примитивен, но: ЧТО ДЕЛАТЬ? Пробовал вообще завязать с WINDOWS-1251 и у всех страниц указывать UTF-8, но это не помогает.
Заранее спасибо.



Спустя 1 час, 13 минут, 37 секунд (10.12.2007 - 23:43) vasa_c написал(а):
encodeURIComponent не кодирует в utf-8, она производит урл-кодирование.
Покажите серверный сценарий и как вы пытались перейти везде на UTF.

Спустя 12 часов, 45 минут, 44 секунды (11.12.2007 - 12:28) barcelona написал(а):
Код
<?php
//header("charset=windows-1251");
include_once("../../includes/config.php");
include_once("../../includes/functions.php");
include_once("../check.php");

$title=$_POST['title'];

$kind_publication=$_POST['kind_publication'];

if (!empty($_POST['number_tom'])) $number_tom=trim($_POST['number_tom']); else $number_tom=0;

$library_code=iconv('UTF-8','WINDOWS-1251',trim($_POST['library_code']));

//Проверка на "пустоту"
$fehler="";
if (empty($title)) $fehler="Значение <b>'Название'</b> не выбрано.<br>";
if (empty($kind_publication)) $fehler.="Значение <b>'Вид издания'</b> не выбрано.<br>";
if (empty($library_code)) $fehler.="Поле <b>'Библиотечный шифр'</b> не заполнено.<br>";
if ($fehler) {
$fehler.="<br><center><a href=\"#\" onClick=\"toggleLoadingDiv(false);\">Закрыть</a></center>";
echo $fehler;
}
else
{
...
}
?>

header-ом я пытался передавать и windows-1251, и utf-8 - ничего не помогает.

Спустя 1 час, 34 минуты, 40 секунд (11.12.2007 - 14:03) vasa_c написал(а):
header('Content-Type: text/html; charset=utf-8');
Быстрый ответ:

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