|
|
|
| Никак мне не удается сделать работоспособную страницу, использующую технологию Ajax. И я уже совершенно запутался во всем этом, как в паутине - то там не работает, то здесь, то вообще не работает нигде. И понимаю, что без конкретной помощи знающего человека мне в этом не разобраться.
А суть дела такая.
В тестовом файле .php размещен код для передачи:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Test Ajax 1</title>
</head>
<body>
<?php
// Файл записан в windows-1251
$data = '<p><font color="#008000">RUSSIA РОССИЯ </font> <font color="#FF00FF"> Ajax</font></p>';
echo $data = iconv('cp1251', 'utf-8', $data);
?>
|
А в принимающем файле 4.рнр размещен код, позволяющий воспроизвести кириллицу "напрямую" и полученную через Аякс (для сравнения):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Test Ajax 2</title>
</head>
<body>
<?php
echo '<p><font color="#008000">RUSSIA РОССИЯ </font> <font color="#FF00FF"> win 1251 </font></p>';
echo <<<TEXT
<div id="content"></div>
<script src="jquery.min.js"></script>
<script>
$.get('3.php', function(data){
// в переменной data находится ответ от скрипта
$('#content').html(data);
});
</script>
TEXT;
?>
|
Оба файла написаны в кодировке ANSI , то есть обычным образом с помощью редактора.
Эта модель прекрасно работает на Денвере. Воспроизводится как кириллица, заданная через 1251, так и кириллица, пришедшая через Аякс. Опробовано в ИЕ8, ФФ и Опера, причем запускающийся файл прекрасно виден в браузере в кодировке win 1251 для всех трех браузеров.
Эту модель из трех файлов, включая библиотеку, я переношу на свой сервер. И получаю вот что:
- ИЕ 8 не воспроизводит Аякс вообще, ни будучи в 1251, ни в UTF-8. То есть, не кракозябры, а вообще нет никаких следов присутствия Аякс;
- ФФ воспроизводит Аякс, автоматически устанавливаясь в 1251, а также в UTF-8;
- Опера воспроизводит Аякс и в режиме UTF-8, и в режиме кириллицы/автоопределение.
Если же в принимающем файле записать
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
| , то ИЕ все равно не понимает Аякс, но тогда еще и ФФ перестает его понимать.
Сохранение самого файла в кодировке UTF-8 ничего не меняет.
Что посоветуете?
Как достичь нормальной работы страницы с Аяксом на сервере с каждым из трех браузеров? | |
|
|
|
|
|
|
|
для: Владимир55
(06.11.2009 в 16:00)
| | Минимизируйте и конкретизируйте задачу и я сделаю её в биб-ке Котерова в трёх браузерах, на кириллице в UTF-8. Я эту гугловскую биб-ку не знаю. И знать не хочу. | |
|
|
|
|
|
|
|
для: coloboc66
(06.11.2009 в 16:46)
| | Это не гугловская библиотека. Её написал парень по имени Джон Ресиг. | |
|
|
|
|
|
|
|
для: Владимир55
(06.11.2009 в 16:00)
| | Уберите
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Test Ajax 1</title>
</head>
<body>
| из скрипта, в котором размещён код для передачи. | |
|
|
|
|
|
|
|
для: Саня
(06.11.2009 в 17:01)
| | Убрал из передающего скрипта. Оно там, и вправду, ни к чему. Однако на результате это не сказалось - ИЕ как не показывал, так и не показывает ничего.
"Минимизируйте и конкретизируйте задачу"
В каком смысле? Мне надо, чтобы воспроизводилась кириллица, полученная средствами Аякс, а также действовали кнопки запуска внешнего файла.
Впрочем, есть и еще одна задача на ближайшее будущее: показывать через Аякс баннеры. Баннеры моего же сайта на другом моем сайте. Тут может случиться, что страница, на которой показывается баннер, будет в 1251.
А как запускатся библиотека Котерова? Не так?
<script src="jquery.min.js"></script>
|
А может, все же в настройках сервера проблема? Ведь денвер то отлично справляется с задачей! А чем денвер не сервер? | |
|
|
|
|
|
|
|
для: Владимир55
(06.11.2009 в 17:22)
| | Кодировка должна быть указана не в передаваемом файле, хотя при необходимости вы можете передавать от сервера и сопутствующие заголовки, а на самой странице. Не принимать файл ваш скрипт может только в случае разрыва соединения, то есть, например, после указанного вами вызова выполняется еще операция AJAX-запроса к серверу и т.п.. Вы ведь не проверяете пришли данные или нет, возвращаемый статус запроса, и т.д..
Вот вы выполните тоже самое только не по загрузке документа, а по клику на какой либо элемент (то есть после загрузки страницы), и 100% получите содержимое, если у вас нет иных ошибок в коде.
Не надо бросаться от jQuery к Котерову, AJAX в jQuery это проще вам для понимания, проблем с кодировкой нет, если все верно делать, можете хоть UTF, хоть 1251 использовать (в соответствующей кодировке и сервер должен быть только настроен), и если все разумно делать, то проблем не будет.
jquery.min.js к Котерову ни какого отношения не имеет, это подключение jQuery. | |
|
|
|
|
|
|
|
для: sim5
(06.11.2009 в 17:42)
| | Что бы понять истоки проблемы, я арендовал дополнительный хостинг и закачал туда вышеупомянутые файлы. Они здесь http://vova.1gb.ru/4.php И все чудесно работает! С любым браузером.
А у меня на ВДС - нет! Хотя файлы - те же.
Стало быть, причины в настройках сервера.
Но где искать эти причины, в каких настройках? | |
|
|
|
|
|
|
|
для: Владимир55
(06.11.2009 в 18:04)
| | firefox+firebug там есть консоль ошибок, сможете опеделить на каком этапе сбой | |
|
|
|
|
|
|
|
для: AlexSol
(06.11.2009 в 21:24)
| | так с файрфоксом у Владимира проблем нет.
Проблемы с IE, как я понимаю. | |
|
|
|
|
|
|
|
для: Владимир55
(06.11.2009 в 18:04)
| | Прикрепите отчет функции phpinfo() с каждого хостинга. И загляните в .htaccess. | |
|
|
|
|
 58.9 Кб |
|
|
для: Саня
(06.11.2009 в 21:53)
| | Это отчет с хостинга, где скрипт работает нормально со всеми браузерами.
Файл .htaccess на этом хостинге отсутствует. | |
|
|
|
|
 45.9 Кб |
|
|
для: Владимир55
(06.11.2009 в 23:30)
| | Это отчет хостинга, вызывающего проблемы.
Файл .htaccess на этом хостинге в настоящее время тоже отсутствует. Но обычно я в него заношу
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html
Options -Indexes
|
В чем принципиальное различие настроек? Уж не в этом ли:
Content-Type text/html; charset=cp1251 | |
|
|
|
|
|
|
|
для: Владимир55
(06.11.2009 в 23:48)
| | Content-Type text/html; charset=cp1251 - возможны проблемы с кодировкой, но не с отсутствием ответа для конкретно IE. Какой-никакой, но в IE8 появился отладчик, я бы воспользовался им, и еще бы проверил ответы сервера. | |
|
|
|
|
|
|
|
для: Владимир55
(06.11.2009 в 23:48)
| | --- | |
|
|
|
|
|
|
|
для: coloboc66
(07.11.2009 в 09:25)
| | Проблема уходит удалением строки AddDefaultCharset cp1251 из файла httpd.conf
Корректно ли такое решение? | |
|
|
|
|
|
|
|
для: Владимир55
(07.11.2009 в 11:32)
| | Да, корректно.
Можно заменить на AddDefaultCharset windows-1251. Возможно это тоже решит проблему. | |
|
|
|
|
|
|
|
для: Владимир55
(07.11.2009 в 11:32)
| | AddDefaultCharset никак не будет воздействовать на тот скрипт, который сам явно указывает кодировку контента через header('Content-Type...');
Так что можно обойтись и без удаления. | |
|
|
|
|
|
|
|
для: Владимир55
(07.11.2009 в 11:32)
| | Вы хотите сказать, что с удалением кодировки по умолчанию, IE начинает получать ответы сервера, а с ней не получает вообще ничего? | |
|
|
|
|
|
|
|
для: sim5
(07.11.2009 в 15:14)
| | Если скрипт не передаёт свой заголовок content-type с указанием кодировки, то отошлётся дефолтный. Видимо IE не осилил cp1251. Ему только windows-1251 подавай. | |
|
|
|
|
|
|
|
для: Саня
(07.11.2009 в 15:18)
| | Да не должно быть такого, я специально проверил эту ситуацию на локальном и реальном сервере. Если есть путаница в кодировке, то квадратики в ответ, но чтобы вообще никакого ответа не приходило для IE, как говорит Владимир, такого не наблюдается. | |
|
|
|
|
|
|
|
для: Владимир55
(06.11.2009 в 17:22)
| | >Мне надо, чтобы воспроизводилась кириллица, полученная средствами Аякс
Русская кодировка должна быть восьмибитной. Поэтому надо установить хедеру:
...Content-Transfer-Encoding: 8bit...
|
(тут можно подумать. Главное, чтобы небыл меньше, а больше быть может?)
Есть ещё один способ. Установить хедеру какой-то супер-мега интернациональный режим кодирования, который называется "quoted-printable"(он ещё используется при передаче почтовых сообщений методом mail()).
...Content-Transfer-Encoding: quoted-printable...
|
Например, в PHP так:
header('Content-Type: text/html; charset=Windows-1251 \n Content-Transfer-Encoding: quoted-printable\n');
|
или
header('Content-Type: text/html; charset=Windows-1251 \n Content-Transfer-Encoding: 8bit\n');
|
У меня оба способа работают. Только значок "+" везде трактуется как "пробел".
И ни кто не знает -
1. Как передавать текст от клиента серверу(а не обратно. Тем же методом AJAX, на низком уровне, а не с помощью библиотек, допустим, методом POST) в заданной кодировке? И если нет:
2. Как заставить ф-ю PHP5 convert_cyr_string() работать с форматом UTF-8? Конкретно, как заставить эту ф-ю преобразовать UTF-8 в w-1251? А то что-то не получается... | |
|
|
|
|
|
|
|
для: Sever
(14.12.2009 в 18:06)
| | >2. Как заставить ф-ю PHP5 convert_cyr_string() работать с форматом UTF-8? Конкретно, как заставить эту ф-ю преобразовать UTF-8 в w-1251? А то что-то не получается...
А как вилкой суп есть не подскажете? А то что-то не получается! Почему-то суп выливается...
http://ua2.php.net/manual/en/function.convert-cyr-string.php | |
|
|
|
|
|
|
|
для: Sergeich
(14.12.2009 в 19:13)
| | >>2. Как заставить ф-ю PHP5 convert_cyr_string() работать с форматом UTF-8? Конкретно, как заставить эту ф-ю преобразовать UTF-8 в w-1251? А то что-то не получается...
>
>А как вилкой суп есть не подскажете? А то что-то не получается! Почему-то суп выливается...
>http://ua2.php.net/manual/en/function.convert-cyr-string.php
Как некрасиво смотрится спесь...
Желающие читать и говорить на английском могут ехать в Англию. Граница открыта.(намёк ясен?)
И не надо строить из себя всезнающего чваниша. Любой человек несовершенное создание. И все знания мира в голову одного человека не поместятся никогда. Кто-то знает то, чего не знаю я, а я иногда знаю то, чего не знают другие. И так всегда и везде.
Если тебе задали вопрос отвечай по человечески, а не пытайся скорчить "ты не знаешь очевидного". В следующий раз очевидного можешь не знать сам. Я же не юродствую по поводу того, что здесь многие плохо представляют себе механизм AJAX. Если вы такой знающий, Sergeich, что это вы не ответил мне на 1 вопрос?
--------------------------------------------------------------------
Итак, скорее всего, с помощью convert_cyr_string() конвертировать UTF-8 ни во что не получится.
Именно поэтому возникают следующие вопросы:
1. В чём причина того, что при передаче данных нам надо пользоваться именно UTF-8?
2. Какими другими ф-циями конвертации русской кодировки надо пользоваться при работе с UTF-8?
3. При неимении ф-ций неплохо было бы указать спецификации кодировок.(сами ф-ции напишем)
Ага, по 3 пункту надыбал кое-что:
http://www.shtogrin.com/library/web/charsets/
А, вот теперь будет праздник и на нашей улице:
UTF-8
http://www.shtogrin.com/library/web/charsets/utf8/
Win-1251
http://www.shtogrin.com/library/web/charsets/windows-1251/
Пример преобразования текста из кодировки KOI-8 в Windows-1251:
http://www.pcre.ru/examples/other/text/20/ | |
|
|
|
|
|
|
|
для: Sever
(14.12.2009 в 21:54)
| | Я уже приводил некоторые ссылки с этого форума, где Вы могли найти ответы на Ваши вопросы.
В одной из этих ссылок была указана функция iconv('utf-8', 'windows-1251', $a);
где utf-8 - исходная кодировка, windows-1251 - получаемая, $a - конвертируемая строка. Но Вы же читать не хотите... | |
|
|
|
|
|
|
|
для: Владимир55
(06.11.2009 в 16:00)
| |
<div id="content"></div>
<script src="jquery.min.js"></script>
<script>
$.get('3.php', function(data){
// в переменной data находится ответ от скрипта
$('#content').html(data);
});
</script>
|
хотябы упрости
<div id="content"></div>
<script src="jquery.min.js"></script>
<script>
$('#content').load('3.php');
});
</script>
|
| |
|
|
|