Как я могу кодировать и декодировать URL-адреса из IDN в PHP? - PullRequest
3 голосов
/ 11 июля 2010

я делаю сайт для проверки, регистрации и т. Д. Доменов, я должен сделать его совместимым с IDN. Прямо сейчас у меня есть что-то вроде этого:

echo $domain;       
$domain = idn_to_ascii($domain);
echo $domain;
$domain = idn_to_utf8($domain);
echo $domain;

и я получаю это:

testing123ásd123 х - testing123sd123-WJB testing123ĂĄsd123

как вы можете видеть, декодированная строка не совпадает с оригинальной, я также попытался использовать класс http://phlymail.com/en/downloads/idna/download/, чтобы сделать это, и я получил те же результаты

Я пытался использовать:

$charset="UTF-8";
echo $domain;       
$domain = idn_to_ascii($domain, $charset);
echo $domain;
$domain = idn_to_utf8($domain);
echo $domain;

и я получил то же самое (за исключением того, что закодированная строка немного отличается)

есть идеи?

EDIT: Задача решена! с этим Проблема при преобразовании строки в код puny (в PHP, используя преобразователь строк из punycode phlyLabs) исходная строка была в iso-8859-2 и декодирована в UTF-8, теперь мне нужно найти, как сделать это снова iso-8859-2, но Google может помочь мне с этим. Есть моды? что мне делать с вопросом? закрыть, стереть? оставить так?

1 Ответ

3 голосов
/ 11 июля 2010

Как вы уже указали, ĂĄ представляется как UTF8-символ á, как показано в документе, отличном от UTF8.

Вы можете использовать iconv () для преобразования между кодировками. Однако следует помнить, что кодировки, не являющиеся Unicode, не могут представлять полный набор международных символов, поэтому должны преобразовывать отсутствующие символы в сущности HTML. E.g.:

<?php

$domain = idn_to_utf8($domain);
echo htmlentities($domain, ENT_COMPAT, 'UTF-8');

?>

В любом случае, вероятно, было бы проще использовать UTF-8 для всего проекта.

...