Thread URL immer auf Latin1 umwandeln (URL-Encoding)
(25 answers)
Opened by GwenDragon at 2010-05-25 19:33
Es gibt auf Webseiten seltsame Zeitgenossen, die verwenden keine Links sondern geben die URL in der Adresszeile ein.
Das führt je nach Browser dazu, dass die URL entweder als UTF-8 oder eben wie im Browser fest eingestellt ist, kodiert wird. Das führt dann dazu, dass beispielsweise in der URL Code: (dl
)
ÄÖÜäöüß Code: (dl
)
%C3%84%C3%96%C3%9C%C3%A4%C3%B6%C3%BC%C3%9F Wenn aber die Webseite Latin1 (ISO-8859-1) ist, wird ein Dekodieren mit URI::Escape der übergebenen URL nicht zum gwünschten Code: (dl
)
%C4%D6%DC%E4%F6%FC%DF Mein Testansatz für eine Umwandlungsfunktion enc_utf8_to_latin1: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 #!/usr/bin/perl use strict; use warnings; use URI::Escape; use utf8; no utf8; sub say { print @_, "\n" } sub dumphex { my $l = shift; map {sprintf("\\x%x", ord) } split //,$l } my $DEBUG = 0; my $uri; my %testcase = ( 'latin1' => '%C4%D6%DC%E4%F6%FC%DF', 'utf8' => '%C3%84%C3%96%C3%9C%C3%A4%C3%B6%C3%BC%C3%9F' ); sub enc_utf8_to_latin1 { no utf8; my $uri = shift; $uri = uri_unescape($uri); $DEBUG && say $uri; $DEBUG && say dumphex $uri; utf8::decode($uri); $DEBUG && say dumphex $uri; $uri = uri_escape($uri); $DEBUG && say $uri; return $uri; } # ÄÖÜäöüß als UTF-8 URL encoded $uri = $testcase{'utf8'} ); say $uri, " = ÄÖÜäöüß als UTF-8 URL encoded"; say enc_utf8_to_latin1($uri), ' = UTF-8 -> Latin1 dekodiert'; say; # ÄÖÜäöüß ISO-8859-1 URL encoded $uri = $testcase{'latin1'} ); say $uri, ' = ÄÖÜäöüß ISO-8859-1 URL encoded'; say enc_utf8_to_latin1($uri), ' = Latin1 -> Latin1 dekodiert'; //EDIT: irritierendes CGI.pm rausgenommen; ändert aber am Grundproblem nichts Irgendwo eine Denkfalle? Last edited: 2010-05-26 12:36:46 +0200 (CEST) |