Skip to content

Conversation

ents
Copy link
Contributor

@ents ents commented Aug 7, 2012

Добавляется возможность нормализировать ссылки вида http://превед.рф/

@dovg
Copy link
Member

dovg commented Aug 7, 2012

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

@dovg
Copy link
Member

dovg commented Aug 7, 2012

Я не прав. Сам по себе модификатор /u ничего не ломает.

ps. Может за одним поправить дизайн нормализатора. Сейчас там два класса определено в одном файле. ИМХО второй можно попробовать заменить на анонимную функцию.

@AlexeyDsov
Copy link
Member

А кому вы такие url'ы хотите отправлять и как? Зона рф сделана жуть как криво. Тем более на url уровнее она выглядит как-то вроде http://xn--b1aebb1cg.xn--p1ai/. Curl очень удивится если вы скормите ему именно http://превед.рф/

@AlexeyDsov
Copy link
Member

Updated:
Единственный сайт который хоть как-то реально поддерживает рф домены (т.е. генерит ссылки под рф, а не редиректит на другой домен) это http://xn--d1abbgf6aiiy.xn--p1ai/ . Если навести вот на эту ссылку в firefox'е - то он подскажет что это президент.рф, а хром, например, такого не скажет.
Так что это задача браузера обманывать пользователя называя xn--p1ai буквами рф.

@ents
Copy link
Contributor Author

ents commented Aug 8, 2012

Мы хотим эти урлы показывать людям. И получить возможность валидировать ссылки http://президент.рф/ (хотим что бы пользователю не показывалось сообщение "ссылка неправильная")

@AlexeyDsov
Copy link
Member

Возможно тогда внутри HttpUrl нужно сделать конвертирование http://президент.рф/ в http://xn--d1abbgf6aiiy.xn--p1ai/ ?

@ents
Copy link
Contributor Author

ents commented Aug 8, 2012

можно, но это будет неудобно, так как тогда в базе будут храниться http://xn--d1abbgf6aiiy.xn--p1ai/. И каждый раз при выводе нужно будет их обратно конвертировать

ЗЫ
% php -r 'curl_exec(curl_init("http://президент.рф/"));'|wc
885 2355 49235
% php -r 'curl_exec(curl_init("http://xn--d1abbgf6aiiy.xn--p1ai/"));'|wc
885 2355 49235

Curl понимает домены в юникоде

@AlexeyDsov
Copy link
Member

php -r 'curl_exec($c = curl_init("http://президент.рф/")); print curl_error($c)."\n";'
Couldn't resolve host 'президент.рф'

Или это у меня местный DNS не дружит с такими штуками?

@dovg
Copy link
Member

dovg commented Aug 8, 2012

Похоже от версии курла зависит. В dns отправляется уже пуникод.

connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.2.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\345\214\1\0\0\1\0\0\0\0\0\0!xn------5cdlca1aqccvl8bfactn0ay5x\10xn--p1ai\0\0\1\0\1", 60, MSG_NOSIGNAL, NULL, 0) = 60
poll([{fd=3, events=POLLIN|POLLOUT}], 1, 5000) = 1 ([{fd=3, revents=POLLOUT}])

@AlexeyDsov
Copy link
Member

А какая у вас версия curl'а?

@dovg
Copy link
Member

dovg commented Aug 8, 2012

у меня вот так

dovg@thinker /tmp $ php -r "phpinfo();" | grep -A 2 -B 2  cURL
curl

cURL support => enabled
cURL Information => 7.26.0
Age => 3
Features
dovg@thinker /tmp $ curl -V
curl 7.26.0 (x86_64-pc-linux-gnu) libcurl/7.26.0 OpenSSL/1.0.1c zlib/1.2.7 libidn/1.25 libssh2/1.4.1 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp 
Features: Debug GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP 

@ents
Copy link
Contributor Author

ents commented Aug 8, 2012

cURL Information => 7.22.0

% curl --version
curl 7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp smtp smtps telnet tftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

@AlexeyDsov
Copy link
Member

А вот такая штука не хочет значит работать:

curl 7.24.0 (x86_64-pc-linux-gnu) libcurl/7.24.0 OpenSSL/1.0.0g zlib/1.2.6 libidn/1.23 libssh2/1.2.8 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp 
Features: Debug TrackMemory GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz

@AlexeyDsov
Copy link
Member

Странно, у @ents версия более старая и работает.

@ents
Copy link
Contributor Author

ents commented Aug 8, 2012

попробуй
% curl http://президент.рф/
и
%php -r 'curl_exec(curl_init("http://президент.рф/"));'

Узнаем в чем косяк, в курле или в пхп
По идее у меня более старый курл, и работает

@AlexeyDsov
Copy link
Member

Все так же:
curl: (6) Couldn't resolve host 'президент.рф'

Вечером из дома попробую. Возможно дело все таки совсем не в curl'е.

@neemah
Copy link
Contributor

neemah commented Aug 8, 2012

$ curl --version
curl 7.27.0 (x86_64-unknown-linux-gnu) libcurl/7.27.0 OpenSSL/1.0.1c zlib/1.2.7 libssh2/1.4.2
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

$ php -r 'curl_exec($c = curl_init("http://президент.рф/")); print curl_error($c)."\n";'
Could not resolve host: президент.рф; Name or service not known

@AlexeyDsov
Copy link
Member

Потестил на виртуалке, она все подгрузила:

curl 7.21.6 (x86_64-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp smtp smtps telnet tftp 
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz

наверно патриотичная виртуалка :)

@ents
Copy link
Contributor Author

ents commented Aug 15, 2012

ну так что, можно это смержить ? bc ломать не должно. Или будет по-другому делать ?

@AlexeyDsov
Copy link
Member

Вынести класс отдельно точно полезно будет. Модификатор юникода можно и добавить раз где-то работает. Хотя то как РФ домены реализованы это то ещё извращение.

@dovg
Copy link
Member

dovg commented Aug 16, 2012

Интересно, это на каком языке?

@crazedr0m
Copy link
Contributor

@bag-art А каким боком это относится к данному pull request-у ?

@bagart
Copy link

bagart commented Aug 16, 2012

поудалялся. чайник я

@dovg
Copy link
Member

dovg commented Aug 27, 2012

Коллеги, если не поступит возражений, то я волью. Эти модификаторы имеют bc.

dovg added a commit that referenced this pull request Aug 28, 2012
Added u modificator to URI check regexp
@dovg dovg merged commit 7ee5ff7 into onPHP:master Aug 28, 2012
dovg added a commit that referenced this pull request Aug 28, 2012
Added u modificator to URI check regexp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants