2010-07-21 2 views
2

Я пытаюсь проверить правильность. , но UrlValidator не поддерживает unicode. здесь кодApache Common UrlValidator не поддерживает unicode. доступный вариант?

public static boolean isValidHttpUrl(String url) { 
    String[] schemes = {"http", "https"}; 
    UrlValidator urlValidator = new UrlValidator(schemes); 
    if (urlValidator.isValid(url)) { 
     System.out.println("url is valid"); 
     return true; 
    } 
    System.out.println("url is invalid"); 
    return false; 
} 

String url = "ftp://hi.com"; 
boolean isValid = isValidHttpUrl(url); 
assertFalse(isValid); 

url = "http:// hi.com"; 
isValid = isValidHttpUrl(url); 
assertFalse(isValid); 

url = "http://hi.com"; 
isValid = isValidHttpUrl(url); 
assertTrue(isValid); 

// this is problem... it's not true... 
url = "http://안녕.com"; 
isValid = isValidHttpUrl(url); 
assertTrue(isValid); 

вы знаете какой-либо альтернативный URL валидатор поддержки Юникода?

i add some case ... http://seapy_hi.com недействителен. Зачем? Underbar является действительным доменом, почему недействителен?

ответ

4

Он не поддерживает IDN. Сначала вам нужно преобразовать URL-адрес в Punycode. Попробуйте это,

isValid = isValidHttpUrl(IDN.toASCII(url)); 
+0

это хорошо. Я добавлю некоторые недоделанные вещи ... это неверно, почему? – seapy

+0

Подчеркивание запрещено в доменном имени. –

+0

um ... но некоторый субдомен доступен .. ex) iloveyou_too.blog.me – seapy

0

Возможно, существует более поздний RFC, который заменяет этот, но технически говорящие URL-адреса не поддерживают Unicode. RFC1738

Соответствующий раздел, в частности:

Нет соответствующих графических US-ASCII:

URL-адреса записываются только с графических печатаемых символов в
US-ASCII кодированного набора символов. октеты 80-FF шестнадцатеричные не
, используемые в US-ASCII, а октеты 00-1F и 7F шестнадцатеричные представляют
управляющие символы; они должны быть закодированы в .

+0

Есть, по крайней мере, 4 стандарта, которые заменяют этот:) – smola

Смежные вопросы