2014-03-12 2 views
8

URL을 ASCII 또는 UTF-8로 인코딩해야하는지 궁금했습니다. 나는 URL이 비 ASCII 문자를 가질 수 없다는 신념하에 있었지만 누군가 UTF-8을 가질 수 있다고 말했고, 나는 주위를 검색하여 어느 것이 사실인지 찾을 수 없었다. 아는 사람 있나요?URL에 UTF-8 문자가 포함될 수 있습니까?

+0

가능한 중복 (http://stackoverflow.com/questions/2742852/unicode-characters-in-urls) – Rafa

답변

4

두 부분으로 나눌 수 있지만 모두 "예"입니다.

IDNA을 사용하면 전체 유니 코드 레퍼토리를 사용하여 도메인 이름을 등록 할 수 있습니다 (모호성과 악용을 방지하기 위해 몇 가지 사소한 왜곡이 있음).

경로 부분은 엄격히 규제되지 않지만 경로의 임의 문자열을 인코딩 할 수 있습니다. 브라우저는 인코딩 된 경로가 아닌 사람이 읽을 수있는 렌더링을 표시하도록 선택할 수 있습니다. 그러나 경로의 문자 집합과 인코딩을 지정하는 방법이 없으므로 이는 휴리스틱을 필요로합니다.

따라서 http://xn--msic-0ra.example/mot%C3%B6rhead은 사용자에게 http://müsic.example/motörhead으로 표시 될 수있는 (가상의 예입니다, 완전히 정확하지는 않은) 컴퓨터 판독 가능 인코딩 된 URL입니다. 도메인 이름은 Punycode라는 이름으로 xn--msic-0ra.example으로 인코딩되며 경로에는 UTF-8로 인코딩 된 URL "motörhead"및 URL 인코딩이 포함됩니다 (유니 코드 코드 포인트 U+00F6은 UTF-8로 0xC3 0xB6의 두 바이트로 다시 표시됩니다).

경로는 mot%F6rhead 일 수 있으며 Latin-1에서 동일한 레이블입니다. 이 경우 합리적인 사람이 읽을 수있는 표현을 추론하는 것이 훨씬 어려울 수 있지만 주변 캐릭터의 컨텍스트가 좋은 추측을위한 충분한 힌트를 제공 할 수 있습니다. 절연에서, %F6은 꽤 많은 것이 될 수 있고, %C3%B6은 예를 들어,. UTF-16.

+0

당신 :

은 문제를 해결하기 위해, 나는 이런 짓을 아마도 "UTF-8"을 쓸 때 "유니 코드"를 의미 할 것입니다. 그것은 내 대답을 근본적으로 바꾸지 않습니다. – tripleee

+16

사실 그들은 둘 다 "아니오"에 해당합니다. 도메인이나 URL에는 비 ASCII 문자가 포함될 수 없습니다. * 그러나 *, 임의의 문자를 ASCII로 인코딩하는 방법이 있습니다. (인코딩 및 punycode 비율) ... – deceze

+0

+1 @deceze (예 : 정규화 된 URL에는 유니 코드가 포함되지 않지만 특히 IDNA 노력은 대단히 중요합니다. 인간 친화적 인 준 정식 표현을 정의하고 활성화하는 방법에 대해 설명합니다. – tripleee

-1

예, URL 경로에는 UTF8 문자가 포함될 수 있습니다. 사실, 봇은 내 웹 사이트에서 /â�� 경로를 요청하고있었습니다. $_SERVER['REQUEST_URI']을 체크했을 때이 값은 단지 이진 쓰레기였습니다 (/???). $ _SERVER [ 'REQUEST_URI']는 이미 디코딩되었지만 디코딩되면 많은 UTF8 문자, 특히 utf8mb4가 나옵니다.

$_SERVER['REQUEST_URI'] = rawurldecode($_SERVER['UNENCODED_URL']); 
[URL을 유니 코드 문자]의