Jakie znaki mogą występować w URL?

0

W tej chwili piszę program, którego jedną z funkcjonalności jest wykrywanie URL w tekście. Powinno wykrywać takie linki jak
http://google.com/?q=wyraz
https://google.com/?q=wyraz
google.com/
google.com

i tak dalej.

Wszystko jest oprogramowane z tym że, została mi jeszcze kwestia jakie znaki mogą być w części http://google oraz /?q=wyraz. Czyli przed i po .com.

Czytałem trochę o tym i dowiedziałem się że w tej pierwszej części mogą być znaki a..z, 0..9, . oraz - w środku. Nie znalazłem wzmianki o _ (też może być czy nie? :( ). Jak jest z dużymi literami?

Na logikę nie można mieć domen z polskimi znakami, jednakże kiedyś widziałem adres "gimnazjum.zdjęcia.com''. nie wiem czy to był jakiś trik z przekierowaniami i mod_rewrite(?) ale czy program powinien "akceptować" takie linki?

0

Jak to nie można mieć domeny z polskimi znakami? Oczywiście, że można.
http://pl.wikipedia.org/wiki/Internationalized_Domain_Name

0

niby w jaki sposób miałbym sprawdzić czy "google" to link czy po prostu wyraz "google"? (mój program pozawala nie wpisywać użytkownikowi http:// żeby było bardziej fajne :)

RFC 1738
3.1. Common Internet Scheme Syntax
//<user>:<password>@<host>:<port>/<url-path>
Some or all of the parts "<user>:<password>@", ":<password>", ":<port>", and "/<url-path>" may be excluded. The scheme specific data start with a double slash "//" to indicate that it complies with the common Internet scheme syntax.

Prawidłowy link właśnie jest określony poprzez scheme, czyli coś, czego nie pozwalasz wprowadzać.

host
The fully qualified domain name of a network host, or its IP address as a set of four decimal digit groups separated by ".". Fully qualified domain names take the form as described in Section 3.5 of RFC 1034 and Section 2.1 of RFC 1123

RFC 1034
3.5. Preferred name syntax

<domain> ::= <subdomain> | " "
<subdomain> ::= <label> | <subdomain> "." <label>
<label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]
<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
<let-dig-hyp> ::= <let-dig> | "-"
<let-dig> ::= <letter> | <digit>
<letter> ::= any one of the 52 alphabetic characters A through Z in upper case and a through z in lower case
<digit> ::= any one of the ten digits 0 through

0

@topic: do takiego czegoś są wyrażenia regularne. W internecie można znaleźć gotowe wyrażenie o różnej jakości i dokładności.
Np tu jest lista radosnej twórczości ludzi: http://regexlib.com/Search.aspx?k=URL&AspxAutoDetectCookieSupport=1 nic tylko sobie wybrać coś co ci najbardziej pasuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1