Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: XMLHttpRequest и кодировка

Сообщения:  [1-10]   [11-15] 

 
 автор: WebTech   (11.09.2006 в 15:27)   письмо автору
 
   для: coloboc66   (09.09.2006 в 22:57)
 

Да, все так, как вы описали.
EncodeURIComponent - это функция JavaScript, которая кодирует строку, как компонент URL, т.е. некоторые символы в управляющие последовательности.
Я думаю, что кириллица в UTF как раз и должна быть закодирована для безопасной передачи.
Хотя может быть и ошибаюсь. Но так все работает :-)

http://www.w3schools.com/jsref/jsref_encodeURIComponent.asp

   
 
 автор: coloboc66   (09.09.2006 в 22:57)   письмо автору
 
   для: WebTech   (08.09.2006 в 17:53)
 

encodeURIComponent()- это что- метод ява-скрипт? Или что? В моем справочнике про это нет ничего... Все-равно не ясно, почему решилась проблема с кодировкой- серверный скрипт ведь никак не зависит от браузерного. Или у вас сервер получает данные в кириллице (обработанной с помощью encodeURIComponent), обрабатывает их и ответные данные тоже выдает в кириллице? Тогда объяснимо.
$name = $_GET['name']; 

Вот это ваше $name- оно в кириллице, да? И в браузере вы делаете примерно так:

var name='Имя';
name=encodeURIComponent(name);
document.forms(0).name.value=name;

И это имя отсылаете, да?

   
 
 автор: WebTech   (08.09.2006 в 17:53)   письмо автору
 
   для: 12345   (08.09.2006 в 14:17)
 

Проблема решилась :-)
В браузерном скрипте отправляемые данные закодировал с помощью encodeURIComponent(). На стороне сервера никаких перекодировок не использовал. И во всех браузерах теперь все правильно отображается :-)
Всем спасибо огромное! :-)

   
 
 автор: 12345   (08.09.2006 в 14:17)   письмо автору
 
   для: coloboc66   (08.09.2006 в 10:32)
 

Динамически его не хранят, а генерируют. Если переменная содержит с-1251, а выдаётся в UTF, то конечно, будет несоответствие. Очевидный вывод - надо перекодировать при выдаче. (Или хранить в UTF.) То, что константа идёт правильно - понятно, она или прекодируется автоматически, или страница файла PHP в UTF-е. Все вопросы про кодировку упираются в необходимость иметь функцию перекодировки, посмотрите здесь на форуме (в этой теме уже советовал, 2-й пост).

   
 
 автор: coloboc66   (08.09.2006 в 10:32)   письмо автору
 
   для: WebTech   (08.09.2006 в 10:29)
 

"Как его можно сохранить в UTF?"(динамически)- а вот это сложный вопрос. Может 12345 знает? А в РНР у вас стоит вот это?
header("Content-type: text/xml; charset=windows-1251"); 

И в html- файле 1251 тоже...

   
 
 автор: WebTech   (08.09.2006 в 10:29)   письмо автору
 
   для: coloboc66   (07.09.2006 в 20:47)
 

У меня XML формируется динамически скриптом. Как его можно сохранить в UTF?

<?php

$name 
$_GET['name']; // передается из браузера с помощью XMLHttpRequest

header ('Content-Type: text/xml');

echo 
'<?xml version="1.0" encoding="UTF-8"?>';

echo 
'<response>';

echo 
'Некий текст, который формируется динамически'.$name;

echo 
'</response>';
?>

Это мой скрипт, который формирует ответ в XML. Дело в том, что вот эта $name выглядит потом в браузере кракозябрами, а строка "Некий текст, который формируется динамически" выглядит нормально.

   
 
 автор: coloboc66   (07.09.2006 в 20:47)   письмо автору
 
   для: WebTech   (07.09.2006 в 18:27)
 

Я думаю- в html и РНР-док-е надо ставить windows-1251, а в xml-док-е надо ставить UTF-8 и сохранять его в UTF-8.

   
 
 автор: WebTech   (07.09.2006 в 18:27)   письмо автору
 
   для: coloboc66   (07.09.2006 в 09:17)
 

Решил проблему с оперой. Оказывается я писал код в ANSI :-) Перекодировал все в UTF-8 и в опере заработало! Текст стал правильно отображаться. Зато в фоксе испортилось :-( Я ничего не понимаю.
Как вообще надо расставлять эти кодировки? В браузере какой charset надо выставлять?
Может быть мне прислать код полностью?

   
 
 автор: coloboc66   (07.09.2006 в 09:17)   письмо автору
 
   для: WebTech   (06.09.2006 в 18:20)
 

А попробуйте в файле РНР вот это поставить, может- поможет...

header("Content-type: text/html; charset=windows-1251");

Нужно ставить вверху файла перед всеми операторами.

   
 
 автор: WebTech   (06.09.2006 в 18:40)   письмо автору
 
   для: coloboc66   (06.09.2006 в 17:19)
 

XML создаю на сервере в PHP

<?php
header 
('Content-Type: text/xml');
// заголовок XML
echo '<?xml version="1.0" encoding="windows-1251" ?>';
echo 
'<response>';
// здесь просто текст
echo '</response>';
?>

А разбираю потом следующим образом

res = request.responseXML;
doc_el = res.documentElement;
message = doc_el.firstChild.data;
// дальше вывод


Я пробовал ставить UTF-8 - получаются кракозябры в любом браузере. А если поставить koi или windows-1251, то IE и фокс нормально все показывают, а опера нет.

   

Сообщения:  [1-10]   [11-15] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования