Ajax и кодировка запросов

Posted Опубликовал cross в Разработка сайтов     Comments 8 comments
Ноя
23

Буржуй ваш - таблетки наши. Конверт просто улётный! GlavMed.com

Неотъемлемая часть Web2.0 проекта использование интерактивного интерфейса, реализацию который приобрел лице Ajax. Я уже немного касался этой темы и сейчас, когда вплотную поставил себя в условия изучения этой технологии обнаружил, что как и любая технология она имеет свои подвохи.

AJAX (от англ. Asynchronous JavaScript and XML — «асинхронный JavaScript и XML») — это подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером. В результате при обновлении данных веб-страница не перезагружается полностью, и веб-приложения могут быть сделаны более быстрыми и удобными.

Ajax, php,  кодровка

Описывать основы работы Ajax с PHP я не стану, поскольку об этом есть много статей и общеступной информации. Все и так могут скачать Ajax скрипты и изучить работу основного компонета XMLHttpRequest.

Сейчас же хочется в качестве полезной заметки описать решение, которое я использовал для борьбы с неправильной кодировкой запроса, в частности при посылке его пользователем через браузер Opera.  Ситуация такова:

  1. Браузер IE, заполняется форма, через Ajax отправляется в скрипт PHP, где происходит insert в базу. В результате в базе текст в номальной кодировке.
  2. Браузер IE, теми же данными заполняется форма, через Ajax отправляется в скрипт PHP, где происходит insert в базу. В результате в базе текст в непонятной кодировке.

Первое, что приходит на ум, проверить кодировку. Недолго серфя по инету находим функцию mb_detect_encoding, но и с ее помощью кодировку не получается определить нормально. В итоге находится функция mb_convert_encoding, которая умеет перекодировать текстовые данные и получаю немного подогнав ответ:

 $encoded_data=mb_convert_encoding($_GET['data'],'Windows-1251','UTF-8');
 $data=(mb_detect_encoding($_GET['data'],"auto",true)=='')?$_GET['data']:$encoded_data;
 $data=trim(strtolower($data));

Только подобные преобразования get запроса от javascript в исполняемом PHP файлике помогают справиться с неправльной кодировкой для обоих браузеров и русский текст инсертится в базу с любой кодировкой... Разбираюсь дальше, а пока.

Maxsite тоже борется с кодировкой :) ну надо же. Притяжение, чтоли опять, или я просто фрик-идеями себе забиваю голову? А вто Zpro до сих пор еще не осознал, что осень - это пора депрессий, а значит даже малейшее несоотвествие реальности своим идеям и желаниям приводит к негативным мыслям или их отсутствию. Осознание проблемы ~ это решение проблемы.

Вот такие javascript штуки мне не очень понятны, но надеюсь скоро освою все в полной мере.
 
Форум вебмастеров

Похожие посты:

  1. Ajax
  2. Ajax и интернет-магазин
  3. Индексация сайта Ajax
  4. Оптимизация запросов MySQL
  5. MySQL импорт

8 Комментов к “Ajax и кодировка запросов”

  • [...] Ли Информация По Бизнес Планированию? Артем Шимко – Ajax и кодировка запросов WebMilk.ru – Объем рекламы в онлайн-версиях газет вырос на [...]

  • [...] когда писал пост про кодировку Ajax, решил проанализировать, что же нужно людям по данной [...]

  • [...] пишет Cross, осень – это пора депрессий. Действительно, осенью и [...]


  • $encoded_data = mb_convert_encoding($_GET['letters'],'Windows-1251','UTF-8');
    if ($encoded_data == "") $encoded_data = $_GET['letters'];
    $letters=(mb_detect_encoding($_GET['letters'],"auto",true)!='UTF-8')?$_GET['letters']: $encoded_data;
    $letters=trim(strtolower($letters));

    у меня заработало так как необходимо только лишь после небольшого дополнения...
    т.к. FF и IE после выполнения первой строки в случае одной русской буквы возвращало пустую строку.

    p.s.: спосибо автору за ценную заметку)

  • Не за что, для того и стараюсь :)

    Вот еще один вариант:
    1. Со стороны Javascript функция:
    - escape(data)
    - encodeURI(data)
    - encodeURIComponent(data)
    2. Со стороны PHP функция:
    - iconv(‘UTF-8′, ‘windows-1251′, $_GET['data']);

    Это пожалуй и все. Тема раскрыта :)

  • Оказывается не раскрыта :)

    Еще более простой способ нашелся. Со стороный яваскрипта, jquery, prototype никаких действий вообще не производится, а на стороне оборотки скрипта устанавливаем mb_internal_encoding (‘UTF-8′); в самом верху. :)

    Далее с кодировкой проблем больше нет.

  • [...] яндексил – все без толку. И заметка Cross-а про ajax и кодировку меня не спасла – другой у меня случай. Сделал маленький [...]

  • [...] пишет Cross, осень – это пора депрессий. Действительно, осенью и [...]

Оставить коммент

Donation Bar

Order Links

Топ комментаторов