2010-05-17 5 views
8

"올바른"URI 유효성 검사기에서 현재 작업하고 있으며 현재 모든 것이 호스트 이름 유효성 검사로 귀결됩니다. 나머지는 그리 까다로운 것이 아닙니다.IDN 호스트 레이블에는 어떤 유니 코드 문자가 허용됩니까?

IDN 호스트 이름 레이블 (예 : 유니 코드 포함)에서 punycode 인코딩 문자열이 디코딩되었음을 나타냅니다.

첫 번째 아이디어는 기본적으로 IDN을 지원하지 않는 TLD와 그렇지 않은 TLD에 대한 하나의 정규식이었습니다. 이는 아마도 Mozilla’s list of IDN-enabled TLDs을 기반으로 할 수 있습니다. 각각 ^[a-zA-Z0-9\-]+$^[a-zA-Z0-9\-\p{L}]+$입니다. 그러나 모든 IDN 등록 기관이 허용 할 문자를 결정할 수 있으므로 이상적인 것은 아닙니다.

내가 찾고있는 것은 다양한 TLD에서 허용되는 유니 코드 문자의 적절하고 일관된 최신 데이터 테이블입니다. 러시아어와 중국어 등록 사이트에서 모든 데이터를 직접 찾아야하는 것처럼 보이기 시작했습니다 (상당히 어렵습니다).

그래서이 모든 데이터를 직접 수집하기 전에 이러한 목록이 이미 있는지 궁금해했습니다. 아니면 더 나은 접근법, 최고/일반적인 관행 등이 있습니까? (유효성 검사를 가능한 한 엄격하게하고 싶습니다.)

답변

1

모든 유니 코드 도메인을 punycode로 변환하고 유효성을 검사 할 수는 없습니까? DNS는 실제 UTF-8 문자를 지원하지 않으므로 이것이 최상의 솔루션 일 수 있습니다.

+0

참 .. 나도 그렇게 생각했다. 그러나 사용자 입력에 관한 ... 나는 사용자가 punycode로 변환 된 uri를 채우기 위해 처음에는 말할 수 없다. 그래서 내 말은 (아마도 당신이 의미하는 것) 내부적으로 punycode로 변환하는 것입니다 ... 여전히 이것은 호스트 이름이 실제로 유효해야한다는 것을 의미하지 않습니다 (올바른 경우 나에게 맞지 않습니다.). 그래서이 경우 유니 코드 문자 (\ p {L}) 그리고 그것이 유효한 것으로 간주하는 것은 기본적으로 똑같습니다. 마지막 옵션은 좋은 해결책을 찾지 못할 경우 대체 수단이 될 것입니다. 이것이 사실 일 경우 mozilla가 제공하는 목록 (예 : 2 개의 정규식)을 유지할 것을 제안 하시겠습니까? –

+0

위의 사항을 확인하십시오. TLD가 모질라에 나열되어 있습니다 -> [a-zA-Z0-9 \ - \ p {L}]/기타 모든 TLD -> [a-ZA-Z0-9 \ -] 이것이 올바른 확인이 될까요? –

관련 문제