Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HTTP header и кириллица, как кодировать? 
V
    Опции темы
GZep
Дата 7.10.2010, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

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



Привет! smile 

Подскажите пожалуйста, как правильно кодировать кириллицу в заголовках?

Вот примеры:

Код

$text = "test_тест";
header("1: " . $text);//НА ВЫХОДЕ: test_тест
header("2: " . base64_encode($text));//НА ВЫХОДЕ: dGVzdF/RgtC10YHRgg==
header("3: " . utf8_decode($text));//НА ВЫХОДЕ: test_????
header("4: " . iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $text));//НА ВЫХОДЕ: test_
header("5: " . iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $text));//НА ВЫХОДЕ: test_
exit();


Как я понял, браузер читает заголовки в ISO/IEC 8859-15, который в свою очередь кодирует только латиницу...


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
gta4kv
Дата 7.10.2010, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

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



1) Сохранить файл в UTF-8.
2) set_locale?

Добавлено через 2 минуты и 29 секунд
Делая
Код

header("Location: /тест");

Не испытываю никаких проблем.
PM MAIL   Вверх
skyboy
Дата 7.10.2010, 23:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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


участник Винграда
***


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

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



Привет, спасибо большое за ответы!

gta4kv, 
Цитата(gta4kv @  7.10.2010,  19:05 Найти цитируемый пост)
Сохранить файл в UTF-8.

файл тут вообще непричем, все посылается из скрипта и все на юникоде работает.
Цитата(gta4kv @  7.10.2010,  19:05 Найти цитируемый пост)
set_locale

мм... сомневаюсь, но чем чёрт не шутит - попробую...

skyboy, примерно такой лаконичный вариант решиния я ожидал, но, видимо, проблема нерешаемая, так как хотелось бы, чтобы прямо в firebug'е показывалась строка с номальным русским значением...
Ваш вариант:
Код

header("6: " . rawurlencode($text));//НА ВЫХОДЕ: test_%D1%82%D0%B5%D0%BA%D1%81%D1%82%20



--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
skyboy
Дата 8.10.2010, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(GZep @  8.10.2010,  11:56 Найти цитируемый пост)
чтобы прямо в firebug'е показывалась строка с номальным русским значением...

тебе шашечки или ехать?
одно дело - читаемое значение в отладчике на клиенте, другое дело - корректная передача на сервер.
определись. а так можно декодировать прямо в консоли firebug'a при помощи decodeURIComponent
PM MAIL   Вверх
GZep
Дата 8.10.2010, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

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



skyboy, хорошо, вот конкретная задача "из жизни":
Код

$realm = "сообщение";
header("WWW-Authenticate: Basic realm=\"" . $realm . "\"");
header("HTTP/1.0 401 Unauthorized");
exit();


На счет setlocale - не прокатило. Честно говоря, фиаско полное, думал найти решение перебирая скриптом все варианты smile 
Вот скрипт:
Код

/**
 * Исходный текст
 */
$text = "test_тест";

/**
 * Такой вариант не отсылаем, чтобы не было гигантского списка
 */
$ignore = "test_";

$ignoreCount = 0;//просто счетчик для интереса))

//Сначало iconv//
/**
 * Список кодировок
 */
$encs = array("UTF-8", "ASCII", "Windows-1252", "ISO-8859-15", "ISO-8859-1", "ISO-8859-5", "ISO-8859-6", "CP1256", "CP1251");
$types = array("", "//TRANSLIT");

foreach ($encs as $enc1) {

    foreach ($encs as $enc2) {

        foreach ($types as $type) {

            $res = iconv($enc1, $enc2 . $type, $text);

            if ($res === $ignore) {

                $ignoreCount++;
                continue;

            }

            header("iconv_" . $enc1 . "_" . $enc2 . "_" . $type . ": " . $res);

        }

    }

}

//Теперь всяко-разное
$buffer = array();

$buffer[] = $text;
$buffer[] = base64_encode($text);
$buffer[] = utf8_decode($text);
$buffer[] = utf8_encode($text);
$buffer[] = rawurlencode($text);
$buffer[] = json_encode($text);
$buffer[] = html_entity_decode(htmlentities($text, ENT_QUOTES, 'UTF-8'), ENT_QUOTES , 'ISO-8859-15');
$buffer[] = mb_convert_encoding($text, 'ISO-8859-15', 'UTF-8');
$buffer[] = preg_replace("/([\xC2\xC3])([\x80-\xBF])/e", "chr(ord('\\1')<<6&0xC0|ord('\\2')&0x3F)", $text);

foreach($buffer as $key => $value) {

    if ($value === $ignore) {

        $ignoreCount++;
        continue;

    }

    header(($key + 1) . ": " . $value);

}

exit();


На грамотность скрипт не претендует, просто собрал всё, что хоть как-то относится к теме и запускал smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
skyboy
Дата 8.10.2010, 16:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



http://forum.vingrad.ru/forum/topic-264706.html
похоже, конкретно для www-authenticate/realm нет решения.
PM MAIL   Вверх
GZep
Дата 8.10.2010, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

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



угу, очень жаль smile но стоит заметить, что не
Цитата(skyboy @  8.10.2010,  16:00 Найти цитируемый пост)
конкретно для www-authenticate/realm нет решения. 

а для любого заголовка происходит такой косяк, ведь в скрипте, который подбирал кодировку вообще не шла речь об www-authenticate/realm и все-равно не работало.

Спасибо за помощь и внимание, вопрос помечу как "нерешаемый" smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
skyboy
Дата 9.10.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(GZep @  8.10.2010,  22:53 Найти цитируемый пост)
а для любого заголовка происходит такой косяк

для "любого другого", который приходит мне в голову(Location, Content-Disposition) можно и стоит пробовать rawurlencode и MIME-кодирование. Т.е. в конечном итоге все зависит от браузера: наверяка, есть браузеры, которые нормально обрабатывают UTF-8 данные в realm, закодированные каким-то образом. Но раз нет стандарта - все браузеры могут работать по-разному(пример: старая статья про исследования возможных значений filename в Content-Disposition).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




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


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

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