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

Ваш аккаунт

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

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

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

AJAX, Internet Explorer, PHP, MySQL

6.6K
01 августа 2006 года
noff
67 / / 01.08.2006
Имеем:

1. Файл index.html. В нем есть функция, делающая http-запрос на сервер. Страница в кодировке utf-8:
[HTML]
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="STYLESHEET" type="text/css" href="/style.css">
<script src="/function.js" type="text/javascript"></script>
</head>
[/HTML]
Запрос, как я понимаю, делается тоже в кодировке UTF-8.

2. Есть сервер. Линус. Апач.

3. На сервере есть файл do.php. Тоже переконвертирован в utf-8. И есть там пятой строкой такая:
 
Код:
header("Content-type: text/html; charset=utf-8");


4. Там же на сервере есть файл .htaccess со строкой:
 
Код:
AddDefaultCharset UTF-8

Это, чтобы на сервере апач не конвертил все в Windows-1251.

5. Есть база данных MySQL. В которой указана кодировка utf-8, В ней есть табличка user, в которой указана точно такая же кодировка utf-8.

Теперь что делаем.

Делаем регистрацию пользователя.

1. В файле HTML есть форма для регистрации, в которой есть поля Имя, Мыло, Пароль. При нажатии на кнопку делается HTTP-запрос на сервер к файлу do.php. Передается все с помощью GET (в коде javascript):
 
Код:
http_request.open('GET', service_url, true);

service_url - это ссылка на скрипт do.php с параметрами в командной строке, т.е. типа:
 
Код:
do.php?mode=register&login=Михалыч&password=parol&mail=lalala@do.com


2. Файл do.php получает данные из командной строки и добавляет их в базу данных MySQL в табличку user.

Теперь проблема:
При работе в FireFox все происходит нормально. Делаем запрос, информация добавляется в базу данных и при вводе в качестве логина "Михалыч"(русскими буквами), в базе данных написано "Михалыч". Если же это делать в IE, то все тоже происходит нормально, но в базе данных вместо "Михалыч" написана всякая фигня.

Что с этим можно сделать?
13
01 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
А как ты просматриваешь "что в базе"?
6.6K
01 августа 2006 года
noff
67 / / 01.08.2006
Не в этом дело. Просматриваю я нормально.
1. Когда вывожу на страницу содержимое переменной. То, что сделано в FireFox все работает нормально. То, что сделано в IE, не работает нигде.
2. Через MySQL Front. Там отображается каракулями в обоих случаях. Но я вижу, что каракули разные для одинаковой строки.

В общем я решил проблему следующим образом:
1. При передаче, содержимое переменной login заменяем на escape(login), получается последовательность, типа:
 
Код:
%CC%E8%F5%E0%EB%FB%F7

И строка запроса, типа
 
Код:
do.php?mode=register&login=%CC%E8%F5%E0%EB%FB%F7&password=parol&mail=lalala@do.com

А в файле do.php написал функцию, которая заменяет escape-символы на нормальные. В соответствии с таблицей подстановок.

НО. Мне хотелось бы выяснить суть проблемы. Мне кажется, что IE хреново передает данные через запрос http. Возможно он передает данные не в utf-8, а в windows-1251.

Есть мысли по этому поводу? Хотелось бы обойтись в работе без всякого рода заплаток, типа функции escape(); Может можно решить проблему намного проще?
13
01 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
Передача пароля на сервер через адресную строку... это что-то новое...
6.6K
01 августа 2006 года
noff
67 / / 01.08.2006
Уважаемый. Во первых это регистрация. И пароль как-то все-таки передается. Во вторых это не относится к теме разговора вроде как. То, что я написал, я написал упрощенно, для понимания.
3.7K
01 августа 2006 года
bioflash
169 / / 01.10.2005
У меня била подобная проблема с IE.
Только я не использовал AJAX, а стандартний метод POST для форми.
И когда я сохранял спецсимволи под IE они били бредовими в БД.
Тогда я поставил в блок head:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

и ето помогло, может когда ти делаеш запрос c помощю AJAX он не принимает во внимание <meta>, или может потому что метод GET. Я не знаю - нужно поексперементировать!!!
6.6K
01 августа 2006 года
noff
67 / / 01.08.2006
У меня в meta тоже стоит:
Цитата:
<META http-equiv="Content-Type" content="text/html; charset=utf-8">


Но это не мешает IE игнорировать его.

3.7K
01 августа 2006 года
bioflash
169 / / 01.10.2005
Вот я про ето говорю:
1) AJAX новая технология и я не знаю как делается запрос (нету времени чтоби все просмотреть, доследить). Может там действительно хардкодно используется windows-1251.
2) Може IE что-то делает не так при запросе.

Я же написал - нада поексперементировать.
Попробуй например метод POST сделать. Или попробуи без AJAX что-то сделать, что-би посмотреть что будет???!!!
6.6K
01 августа 2006 года
noff
67 / / 01.08.2006
Без аякса все естественно работает. Уже делал. Теперь решил с аяксом.
3.7K
01 августа 2006 года
bioflash
169 / / 01.10.2005
Ну тогда попробуи метод POST, или посмотри может есть какие-то дополнительние функции для настроики http_request.
13
01 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
IE превосхдно работает с http

1) Убедись что ВСЕ, АБСОЛЮТНО все файлы участвующие в работе написаны в кодировке UTF-8
2) Используй метод POST
3) Убедись что в IE стоит автоматический выбор кодировки
4) Посмотри какие заголовки присылает сервер и какие отправляет браузер - в ФФ есть плагин для этого
285
01 августа 2006 года
Romik
479 / / 24.11.2002
Господа, тут некоторые фигней страдают, честное слово.
Во-первых, escape() как раз и служит для корректной передачи данных, во вторых, AJAX - новая технология (читайте справочники, ничё нового, просто раньше не юзали), так вот, при работе с AJAX вы ведь юзаете XML, вот от сюда и отталкивайтесь <?xml encoding="utf-8"?> + escape и никаких проблем
Повторюсь, escape - это не лишняя заплатка, так надо! оно для этого и создано, эта ситауация, для этой функции
6.6K
01 августа 2006 года
noff
67 / / 01.08.2006
IE с XML не работает. Пробовал.
Но спасибо за совет.
А есть в PHP стандартная функция, которая деэксейпит текст?
352
01 августа 2006 года
skywalker
694 / / 10.02.2006
[QUOTE=noff]IE с XML не работает. Пробовал.
[/QUOTE]
Покажи как пробовал.
Для js все равно какие теги обрабатывать.
ЗЫ В осле вообще XSLT встроен, правда не стандартный.
6.6K
01 августа 2006 года
noff
67 / / 01.08.2006
С XML давно уже было. Исходник уже давно был пересохранен для работы с текстом. Так что показать не могу.
13
01 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
[QUOTE=noff]IE с XML не работает. Пробовал.[/QUOTE]
Мда...как все грустно...
285
01 августа 2006 года
Romik
479 / / 24.11.2002
На нескольких ресурсах один и тот же пример
var req;

function loadXMLDoc(url)
{
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
// ...
// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
// ...
}
}
}

Умышлено привёл не всю, чтобы только подчеркнуть разницу реализации в различных браузеров, а ваще начните с этой статьи Там есть полно ссылок или хотя бы поюзайте goolge
13
01 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
Кстати а какого вида крякозябры?! Приведи пример. Я кажется знаю в чем у тебя проблема. И какую библиотеку для реализации AJAX используешь?
2.8K
03 августа 2006 года
S|lent
65 / / 20.04.2005
[QUOTE=Romik]На нескольких ресурсах один и тот же пример
var req;

function loadXMLDoc(url)
{
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
// ...
// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
// ...
}
}
}

Умышлено привёл не всю, чтобы только подчеркнуть разницу реализации в различных браузеров, а ваще начните с этой статьи Там есть полно ссылок или хотя бы поюзайте goolge[/QUOTE]

Полностью согласен, ещё статья. Здесь неплохо написано про технологию и даны примеры реализации. Также хорошо объяснено то, каким образом происходит работа скрипта в разных браузерах.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог