Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемы кодировкой

477
11 июня 2007 года
Robinnovich
182 / / 02.12.2006
Здравствуйте уважаемые, хочу задать такой вопрос: как можно решить проблему с кодировкой при роботе с ajax у меня просто вечная проблема что при ответе от сервера если это идет в какой-то div и все это на русском языке – то весь текст в кодировке UTF8. Конечно раньше делал декодирование с помощью таких функций
function utf8decode($str, $encode="windows-1251"){
return iconv("UTF-8", $encode, $str);
}
function utf8code($str,$encode="UTF-8"){
return iconv("windows-1251", $encode, $str);
}
И к этому парадокс чтобы ajax вернул нормальный текст то надо использовать utf8code.
Ну все бы и хорошо только что-то такой метод не на всех серверах работает вот например на localhost где Windows-xp pro. + Apache2 + MySql4-nt + php5.2 все пучком, а на сервере где Linux Debain Apache2 + MySql4- Debain + php5.2 такой метод не работает всеравно в ответ получаю UTF8. Подскажите как правильно проектировать сайт чтобы небело таких неурядиц .
Заранее спасибо.
271
11 июня 2007 года
MrXaK
721 / / 31.12.2002
у меня ни на локале ни на серве в инете не было такой проблемы... стоит тока кодировка самого сайта через header, а через iconv() перекодировать приходится только то что приходит из клиентской части... ответ посылаю в win1251 и приходит клиенту тоже в win
15
11 июня 2007 года
shaelf
2.7K / / 04.05.2005
Перед ответом асинхронного вызова отправляй header() с нужной кодировкой. Т.е. если ответ у тебя cp1251, то и отправляй header("location:cp1251"), а после этого заголовка - ответ. При принудительной установке кодировки ответу она будет приходить в ней.
477
11 июня 2007 года
Robinnovich
182 / / 02.12.2006
Если можно поподробнее что- то и куда я так понял что надо дописать дето header("Content-type: text/plain; charset=windows-1251"); но тут проблема после добавления такой сторуки выводится просто HTML текст не обрабатывается браузером .
Может проблема в самом ajax файле там где создается XMLHttpRequest гляньте кто разбирается
Код:
function ajax() {
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.open("POST", urlString, true);
    req.setRequestHeader("Method", "POST " + urlString + " HTTP/1.1");
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251");
    req.onreadystatechange = processReqChange;
    req.send(StringSending);
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.open("POST", urlString, true);
            req.setRequestHeader("Method", "POST " + urlString + " HTTP/1.1");
        req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251");
        req.onreadystatechange = processReqChange;
        req.send(StringSending);
        }
    }
}

function processReqChange() {
    ab = window.setTimeout("req.abort();", 5000);
    if (req.readyState == 4) {
        clearTimeout(ab);
        if (req.status == 200) {
            showloadming(false);
            if (createobject!=''){
        div_result.innerHTML=req.responseText;
        result=req.responseText;
        }
            showloadming(false);
        } else {
            alert("It was not possible to obtain the data:\n" + req.statusText);
        }
    }
}
15
11 июня 2007 года
shaelf
2.7K / / 04.05.2005
Ссори, по привычке локейшен засунул((.
Тут дело не в Ява Скрипте. У тебя есть РНР файл (функция), который отдаёт контент для аякса.
 
Код:
<?php
echo 'Это просто глупый некчёмный текст';

Теперь его немного модернизируй и получится
 
Код:
<?php
header(....);
echo 'Это просто глупый некчёмный текст';

Так понятней?
477
12 июня 2007 года
Robinnovich
182 / / 02.12.2006
Ну это я понял только я что-то туплю и не знаю в чем вот допустим есть функция
 
Код:
function View(){
echo "<table><tr><td>блаблабла</td><td><img src=’delete.gif’ &#111;&#110;click=’ajax()’></td></tr></table>"
}
потом функция которую вызывает нажатие кнопки удалить
function Delete(){
//Удаление с БД
//вызов функции function View()
View();
которая  выведет все записи без той что мы удалили и выведет в div который мы указали в JS функции ajax
}

И вот судя с этого нам header("charset: cp1251"); или header("charset: windows-1251"); подставить в функцию Delete() но не какого результата нету
Ниже привожу картинку где верхний рисунок это ответ ajax в опере а нижний что долино бать.
477
12 июня 2007 года
Robinnovich
182 / / 02.12.2006
sorry тупонул )) header("Content-type: text/html; charset=windows-1251"); вот так правельно начебто заработало ) если что еще отпешусь ))
477
13 июня 2007 года
Robinnovich
182 / / 02.12.2006
а глянте кто-то пожалуйсто на этот клас
Код:
this.send_ajax = function (id, element){
        this.create_ajax();
        if(this.failed && this.AjaxFailedAlert){
            alert(this.ajax_alert);
        } else {
            if (this.xmlhttp){
                ShowLoading();
                var self = this;
                if (this.method == "GET") {
                    var totalurlstring = (this.URLString) ? this.request_file + "?" + this.URLString + "&" + "ajax=true" : this.request_file + "?" + "ajax=true";
                    this.xmlhttp.open(this.method, totalurlstring, true);
                } else {
                    this.request_file = (this.URLString!="") ? this.request_file + "&" + this.URLString : this.request_file;
                    this.xmlhttp.open(this.method, this.updateURL(this.request_file), true);
                }
                if (this.method == "POST"){
                    try {
                        this.xmlhttp.setRequestHeader("Method", "POST " + updateURL(this.request_file) + " HTTP/1.1");
                        this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251");
                    } catch (e) {}
                }
                this.xmlhttp.send(this.StringSending);
                this.xmlhttp.onreadystatechange = function() {
                    switch (self.xmlhttp.readyState){
                        case 1: self.onLoading(); break;
                        case 2: self.onLoaded(); break;
                        case 3: self.onInteractive(); break;
                        case 4: self.response = self.xmlhttp.responseText;
                                self.responseXML = self.xmlhttp.responseXML;
                                self.ReqStatus = self.xmlhttp.status;
                                self.result_string = self.xmlhttp.responseText;
                                HideLoading();
                                switch (element){
                                    case "test": document.getElementById(id).value=self.result_string;
                                    default: document.getElementById(id).innerHTML=self.result_string;
                                }
                                self.onHide();
                                self.onCompletion();
                                self.URLString = "";
                                HideLoading();
                                break;
                        }
                };
            }
        }
    };


почему-то send не хочет отправлять точнее сервер не видет POST переменных которые передаю хотя в предыдущей версии функций роботы с ajax все работало вот не пойму разницы
256
13 июня 2007 года
foxweb
1.0K / / 27.07.2005
где-то в феврале я задавал здесь уже такой вопрос. на локале выкрутился перекодировкой строк, а на глобальном сервере всё работало без трюков. попробуй, может у тебя тоже будет нормально всё на хостинге.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог