Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Траблы с русскими буквами при запросе в Ajax, Пытаюсь использовать encodeURI - никак. 
V
    Опции темы
kaa
  Дата 16.8.2006, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: 1
Всего: 2



Есть код формирующий запрос к серверному скрипту по методу GET. В запросе присутствует строка-сообщение содержащая русские буквы. Так как Ajax наотрез отказывается работать с русскими буквами то я пошарив по этому сайту поиском наткнулся на методы encodeURI и decodeURIElement

Так вот encodeURI всё преобразует нормально в UTF-8, но в базу данных вставляется нечто типа РџСЂРёРІРµС.

Сам код формирующий запрос:
function ClickButtonRequest()
    {
                CreateXMLHttpRequest();
        var message_address = document.forms["private_form"].elements["address"].value;
        var message_text = document.forms["private_form"].elements["message"].value;
        var message_text_code = encodeURIComponent(message_text);
        var str = "message_in.php?private=y&address=" + message_address + "&message=" + message_text_code;
        str = encodeURI(str);
        XRH.open("GET", str);
        XRH.send(null); 
    }


Да, добавлю что английские буквы проходят нормально...
Я в кодировках  и текстовых форматах несилён, мож у меня мускул не так настроен, или в PHP нада что-то зделать, скажите кто-нибудь
PM MAIL   Вверх
skyboy
Дата 16.8.2006, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



Цитата

РџСЂРёРІРµС.

- это UTF-8. Но текущая кодировка базы - cp1251. Потому при вставке корёжится. Надо перед вставкой делать запрос на сервер:
Код

SET NAMES utf8;

Это вариант - 1.
Вариант - 2 заключается в том, что у тебя записано нормально, но читается с приведением к кодировке cp1251. Чтоб читалось в UTF, надо перед чтением отправить запрос на сервер.
Код

SET NAMES utf8;

Вариант - 3 заключается в том, что так как ты не настривал работу с кодировками, оно и вставляет в базу и читает потом в кодировке ср1251, потому надо и перед операцией вставки, и перед операцией чтения(если они идут у тебя не одна за одной - в разных файлах или сессиях; если же они выполняются последовательно - хватит только одного раза - в самом начале) надо выполнить следующий запрос:
Код

SET NAMES utf8;

Вариант - 4. У тебя кодировка таблицы - ср1251. Потому надо поменять кодировку таблицы. "Как это сделать" -  на этот вопрос можно ответить, если скажешь, каким front-end средством ты администрируешь базу.

PM MAIL   Вверх
kaa
Дата 16.8.2006, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: 1
Всего: 2



skyboy, Круто... smile 
Скока подробностей...
Базу админю MySQL Control Centеr- ом
А вот как там кодировку в текстовых полях задавать понятия неимею.Иинтересно было бы узнать заодно как это делать не тока из контрола но из консоли.
 smile 

Это сообщение отредактировал(а) kaa - 16.8.2006, 09:29
PM MAIL   Вверх
skyboy
Дата 16.8.2006, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



Цитата(kaa @  16.8.2006,  08:28 Найти цитируемый пост)
А вот как там кодировку в текстовых полях задавать понятия неимею

бери хелп от MySQL Server и копай в сторону Alter table. В Create table тоже указывается кодовая страница. Так что  - вперёд.
зы MySQL Control Centеr - эта штука мне незнакома. Потому ничего не могу сказать, касательно её применения...
PM MAIL   Вверх
kaa
Дата 16.8.2006, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: 1
Всего: 2



skyboy, Понял, спасибо за направление, 
Гавное знать где копать smile
PM MAIL   Вверх
kaa
Дата 16.8.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: 1
Всего: 2



skyboy, Кодировка БД по умолчанию latin1
А вот на команду
Код

SET NAMES utf8;

ругается, в частности на параметр NAMES  smile 
PM MAIL   Вверх
skyboy
Дата 16.8.2006, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



как выглядит весь запрос? попробуй убрать ";" - это в консоли нужен разделитель...
PM MAIL   Вверх
kaa
Дата 17.8.2006, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: 1
Всего: 2



Не, всёравно ругается - скрипт PHP просто в алерт вылетает, яв консоли попытался этот сет провести - ругается smile
У меня мускул 4.0.18 - может от этого зависит?
PM MAIL   Вверх
skyboy
Дата 17.8.2006, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



даже не знаю. а в help'e по этой теме(установка переменной окружения NAMES) смотрел?
PM MAIL   Вверх
kaa
Дата 17.8.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: 1
Всего: 2



skyboy, Смотрел - там про мою версию мускула нет ничего, как-то рплавно пе5реходят от 3х к 4.1.х А у мя 4.0.18

Нада народ в разделе БД - х потеребить, мож кто что знает...

Спасибо за советы!
PM MAIL   Вверх
kaa
Дата 19.8.2006, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: 1
Всего: 2



В общем власть поменялась!
Протестировал я серверный скрипт напрямую и оказалось что всё в бд записывается нормально - UTF-8, тока страница на которую у меня возвращается результат с кодировкой windows-1251.
Как сделать так чтобы получать текст в кодировке виндовой, и главное где? Можно как нить перекинуть из кода в код с помощью джавы-скрипта или PHP или в мускуле как-то ето сделать?
PM MAIL   Вверх
kaa
Дата 21.8.2006, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: 1
Всего: 2



И что? Никто-никто ненает?!
PM MAIL   Вверх
12345c
Дата 21.8.2006, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



На JS можно, читать побайтово, приводить к коду вида %uHHHH, (H-hex), делать unescape(). Только покажи метод кодировки  UTF-8.
PM WWW   Вверх
chdan
Дата 29.8.2006, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Та же фигня. Страдаю ужасно - на полученные русские слова высвечивается js ошибка System error: -1072.... и так далее.

Как я понимаю, пхп серваку надо выдавать данные в UTF8? Если да, то как на него перейти?
PM MAIL   Вверх
skyboy
Дата 30.8.2006, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



chdan, код, код давай...
PM MAIL   Вверх
chdan
Дата 30.8.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Код

        // Получаем объект XMLHTTPRequest
        if(!this.http){
            this.http = get_http();
        }
        this.working = false;
        // Запрос
        if (!this.working && this.http) {
            var http = this.http;
            // Если в текстовом поле менее трёх
            // символов - не делаем ничего
            if (text.length <3 ) return;

                //добавляем закодированный текст
            //в URL запроса
            url = url + "?cmd=commit&text="+document.getElementById("g_answer").value;
            //создаём запрос
            this.http.open("GET", url, true);
            //прикрепляем к запросу функцию-обработчик
            //событий
            this.http.onreadystatechange = function() {
           // 4 - данные готовы для обработки
                if (http.readyState == 4) {
                    fill(http.responseText);
                    this.working = false;
                  } else{
                     // ЖДИТЕ ОТВЕТА
                  }
            }
            this.working = true;
            this.http.send(null);
        }
        if(!this.http){
              alert('Ошибка при создании XMLHTTP объекта!')
        }


Во время вызова метода this.http.open("GET", url, true); появляется ошибка, которую я писал. С английскими - все прокатывает шикарно. 

Это сообщение отредактировал(а) 12345c - 30.8.2006, 16:02
PM MAIL   Вверх
POLTER
Дата 3.9.2006, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 25.8.2006
Где: Ростов-на-Дону

Репутация: нет
Всего: 2



Здравствуйте!!! =)
У меня аналогичная проблема...
С помощью Аякс-а я получаю данные с сервера, которые динамически сгенерированы скриптом.
Принцип получения данных прост - создание XmlHTTPRequest, ПОСТ запрос скрипту, в скрипте генирируются данные, которые потом передаются клиенту через responseText. 
И проблема в том, что возвращает данные он в UTF-8, а нужно в windows-1251.... 
В чем трабла? Никаких баз данных не используется, просто создается ответ на основе параметров.
Заранее спасибо!
--------------------
Существует 10 типов людей: те, которые понимают твоичный код и те, которые его не понимают.
PM MAIL ICQ   Вверх
R.M.
Дата 6.11.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Анархист
****


Профиль
Группа: Участник
Сообщений: 2164
Регистрация: 8.6.2005
Где: Питер

Репутация: нет
Всего: 30



У меня та же трабла и без БД, передаю скрипту данные он мне их же возвращает но в другой кодировке, незнаю UTF-8 или нет smile прописал в php-скрипте кодировку, не помогло.
Выдаёт такое
Цитата

текст



--------------------
Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека.

Nokia LifeStyle - Всё для смартфонов Nokia 
PM MAIL WWW ICQ   Вверх
R.M.
Дата 6.11.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Анархист
****


Профиль
Группа: Участник
Сообщений: 2164
Регистрация: 8.6.2005
Где: Питер

Репутация: нет
Всего: 30



Побродил по разным форумам и нашёл такое решение

Код

function encoderus(EntryTXT) {
  var text = "";    
  var Ucode;
  var ExitValue;
  var s;
  
  for (var i=0; i<EntryTXT.length; i++) {
  
    s= EntryTXT.charAt(i);
    Ucode = s.charCodeAt(0);
    var Acode = Ucode;
    if (Ucode > 1039 && Ucode < 1104){
      Acode -= 848;
      ExitValue = "%" + Acode.toString(16);          
    }
    else  
    if (Ucode == 1025) {
      Acode = 168;
      ExitValue = "%" + Acode.toString(16);          
    }
    else  
    if (Ucode == 1105){
      Acode = 184;
      ExitValue = "%" + Acode.toString(16);          
    }
    else
    if (Ucode == 32){
      Acode = 32;
      ExitValue = "%" + Acode.toString(16);          
    }
    else if(Ucode == 10){
        Acode=10;
        ExitValue = "%0A";
    }else
     ExitValue=s;          
    
   text = text + ExitValue;

  }      
    return text;
}


может можно его как-то упростить? smile или сделать подругому?

Это сообщение отредактировал(а) Aliance - 11.12.2006, 00:07


--------------------
Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека.

Nokia LifeStyle - Всё для смартфонов Nokia 
PM MAIL WWW ICQ   Вверх
R.M.
Дата 6.11.2006, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Анархист
****


Профиль
Группа: Участник
Сообщений: 2164
Регистрация: 8.6.2005
Где: Питер

Репутация: нет
Всего: 30



Решил так, входящие данные обрабатывать в php-скрипте
Код

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

Только по дефолту библиотека iconv закоментирована, её надо раскоментировать в php.ini


--------------------
Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека.

Nokia LifeStyle - Всё для смартфонов Nokia 
PM MAIL WWW ICQ   Вверх
TNT86
Дата 6.11.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 14.8.2006
Где: Одесса

Репутация: нет
Всего: нет



Если ты принимаешь данные с помощью PHP, просто перекодируй входные данные с помощью функции iconv из UTF-8 в Windows-1251 или KOI-8 в зависимости от того какая кодировка тебе нужна. По идее должно решить твои проблемы.
--------------------
виртуальныe MYSQL и  PHP эксперты
PM MAIL WWW   Вверх
SelenIT
Дата 6.11.2006, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(R.M. @  6.11.2006,  11:46 Найти цитируемый пост)
можно его как-то упростить?

Вот здесь приведено подобного плана решение чуть покороче и более гибкое (благодаря настраиваемой таблице перекодировки). Если, скажем, админ хостинга наотрез отказывается ставить iconv - можно воспользоваться таким подходом. Но перекодировать на сервере считается надежнее и правильнее.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
R.M.
Дата 6.11.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Анархист
****


Профиль
Группа: Участник
Сообщений: 2164
Регистрация: 8.6.2005
Где: Питер

Репутация: нет
Всего: 30



TNT86, я уже выше сказал об этом smile 

SelenIT, спасибо за ссылку есди понадобится буду применять, мой хостер вроде по дефолту включил iconv.

Цитата(SelenIT @  6.11.2006,  13:48 Найти цитируемый пост)
Но перекодировать на сервере считается надежнее и правильнее. 

Я тоже так думаю smile


--------------------
Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека.

Nokia LifeStyle - Всё для смартфонов Nokia 
PM MAIL WWW ICQ   Вверх
_lleopard_
Дата 5.6.2007, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 18.4.2007

Репутация: нет
Всего: нет



Я получаю в скрип заподировнную строку, либо utf-8 либо windows - 1251, как мне его раскодировать, что бы можно было допустим в Alert  сообщение вывести или ещё куда...проблемма в том, что теряются русские буквы
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1117 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.