PDA

Просмотр полной версии : кириллический домен: как сделать редирект?


fbidesign
11.06.2010, 11:26
Добрый день
проблема такая. Делаю редирект со своего сайта на кириллический домен
(например, Президент.рф)
header("Location: http://президент.рф");
(передается кириллицей в простом текстовом виде), приходит в браузер в нем же без изменений.

Опера выдает ошибку "Неверный URL-адрес"
URL-адрес: http://%EF%F0%E5%E7%E8%E4%E5%ED%F2.%F0%F4 содержит символы, недопустимые в позиции, где они обнаружены.
Firefox поступает аналогично.

Подскажите в чем проблема
(т.е. какого черта они преобразуют в urlencode и как от этого избавиться)
Версии браузеров свежие т.е. если я ввожу кириллический домен в строку адреса он открывается нормально

BrainDeaD
11.06.2010, 11:32
днс не поддерживает кирилицу. по этому существует ascii аналог .xn--p1ai

например: президент.xn--p1ai

до днс дело тут не доходит
веб браузер переизвращает переданный ему адрес
ну тогда пиши так xn--d1abbgf6aiiy.xn--p1ai

fbidesign
11.06.2010, 11:40
до днс дело тут не доходит
веб браузер переизвращает переданный ему адрес

gold-goblin
11.06.2010, 11:51
пробуй редиректить на http://xn--d1abbgf6aiiy.xn--p1ai/ (призедент.рф)

fbidesign
11.06.2010, 12:03
а как написать конвертер произвольного кириллического адреса в этот вид?

BrainDeaD
11.06.2010, 12:07
PHP-класс: http://phlymail.com/en/downloads/idna/download/

пример работы: http://idnaconv.phlymail.de/?lang=en

fbidesign
11.06.2010, 12:42
спс за линк.
то ли класс глючный то ли хостинг...
вообщем в example при скармливании адреса через веб форму все работает.
Если задаю адрес в php-коде (присваиваю переменной)
$_REQUEST['decoded']="http://президент.рф";
перед if (isset($_REQUEST['encode'])) равно как если брать адрес из БД или еще откуда

то выдает
Conversion from UTF-8 to UCS-4 failed: malformed input at byte 8
т.е. матерится на первую русскую букву "п".

krypt3r
11.06.2010, 13:11
Ключевое слово в ошибке выделено красным

Conversion from UTF-8 to UCS-4 failed: malformed input at byte 8

fbidesign
16.06.2010, 15:21
Добавил $row[url]=utf8_encode($row[url]);
На выходе получаю http://xn--4cabbgf6aiiy.xn--hdai (какую-то ерунду)
вместо http://xn--d1abbgf6aiiy.xn--p1ai/
ПОЧЕМУ?

Код:

$row = mysql_fetch_array($res); //http://президент.рф
$row[url]=utf8_encode($row[url]); //http://президент.рф в UTF

require_once('./idna_convert.class.php');
$IDN = new idna_convert();
$decoded = isset($row[url]) ? stripslashes($row[url]) : '';
$encoded = $IDN->encode($decoded); //http://xn--4cabbgf6aiiy.xn--hdai

echo "Location: $encoded <br>";
$decoded = $IDN->decode($encoded);
echo "back: ".utf8_decode($decoded)."<br>"; //http://президент.рф

что самое интересное - обратное пребразование приводит к исходному результату

krypt3r
17.06.2010, 06:51
Че-то вы совсем не то делаете

utf8_encode — Encodes an ISO-8859-1 string to UTF-8

Юзайте iconv()

PS. PHP 5.3.0

http://ru2.php.net/manual/en/function.idn-to-ascii.php
http://ru2.php.net/manual/en/function.idn-to-utf8.php

Dr1ver
17.06.2010, 07:02
Попробуй метатегом из html