Проблема стара как мир, но от этого легче не становится. Итак: я отправляю данные со страницы следующим образом:
Код
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;
}
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.
Покажите серверный сценарий и как вы пытались перейти везде на 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("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');