Können URLs UTF-8-Zeichen haben?

8

Ich war neugierig, ob ich URLs mit ASCII oder UTF-8 codieren sollte. Ich war der Überzeugung, dass URLs keine Nicht-ASCII-Zeichen haben können, aber jemand sagte mir, dass sie UTF-8 haben könnten, und ich suchte herum und konnte nicht ganz herausfinden, welches wahr ist. Weiß jemand?

    
Popcorn 12.03.2014, 16:14
quelle

2 Antworten

4

Es gibt zwei Teile, aber beide sind "ja".

Mit IDNA ist es möglich, Domain-Namen unter Verwendung des vollständigen Unicode-Repertoires zu registrieren (mit ein paar kleineren Wendungen, um dies zu verhindern) Unklarheiten und Missbrauch).

Der Pfadteil ist nicht streng reguliert, aber es ist möglich, beliebige Strings im Pfad zu codieren. Der Browser könnte sich dafür entscheiden, ein menschenlesbares Rendering anstatt eines codierten Pfades anzuzeigen. Dies erfordert jedoch Heuristiken, da es keine Möglichkeit gibt, den Zeichensatz und die Codierung des Pfades anzugeben.

Also Ссылка ist ein (fiktives Beispiel, nicht ganz korrekt) computerlesbare kodierte URL was dem Benutzer als Ссылка angezeigt werden könnte. Der Domainname wird als xn--msic-0ra.example in etwas namens Punycode codiert und der Pfad enthält die Bezeichnung "motörhead", codiert als UTF-8 und URL-codiert (der Unicode-Codepunkt U+00F6 wird mit den zwei Bytes 0xC3 0xB6 in UTF-8 dargestellt.

Der Pfad könnte auch mot%F6rhead sein, was die gleiche Bezeichnung in Latin-1 ist. In diesem Fall wäre es viel schwieriger, eine sinnvolle, menschenlesbare Darstellung abzuleiten, aber vielleicht könnte der Kontext der umgebenden Charaktere genug Hinweise für eine gute Vermutung bieten.

Für sich genommen könnte %F6 so ziemlich alles sein, und %C3%B6 könnte z.B. UTF-16.

    
tripleee 12.03.2014 16:20
quelle
-1

Ja, URL-Pfade können UTF8-Zeichen enthalten. In der Tat hat ein Bot den Pfad /â�� auf meiner Website angefordert. Als ich $_SERVER['REQUEST_URI'] überprüfte, war der Wert nur ein paar binärer Müll, /??? . Es stellt sich heraus, $ _SERVER ['REQUEST_URI'] ist bereits decodiert, aber wenn es decodiert wird, bricht es viele UTF8 Zeichen, vor allem utf8mb4.

Um es zu beheben, habe ich Folgendes getan:

%Vor%     
Frank Forte 30.05.2017 16:36
quelle