Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   кириллический домен: как сделать редирект? (https://forum.antichat.xyz/showthread.php?t=210773)

fbidesign 11.06.2010 11:26

кириллический домен: как сделать редирект?
 
Добрый день
проблема такая. Делаю редирект со своего сайта на кириллический домен
(например, Президент.рф)
PHP код:

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

Цитата:

Сообщение от fbidesign
до днс дело тут не доходит
веб браузер переизвращает переданный ему адрес

ну тогда пиши так 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-коде (присваиваю переменной)
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/
ПОЧЕМУ?

Код:
PHP код:

$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



Время: 03:07