dedlfix: mod_rewrite zerstört Unicodes?

Beitrag lesen

echo $begrüßung;

  • *Wie* *genau* gibst du den Inhalt des GET-Parameters aus?
    echo $_GET['var'];

Für genaueere Ausgaben empfiehlt sich var_dump() statt echo. var_dump() gibt bei Strings nämlich noch die Länge an und zeigt den Wert in Begrenzungszeichen an. Es ist dann bei Bremen im Beispiel mit mod_rewrite die Länge 7 und ein anhängendes Leerzeichen deutlicher zu sehen.

  • print_r($_SERVER) ergibt was? (relevante Bestandteile)

Der Inhalt von $_SERVER (oder auch der unteren Teil einer phpinfo()-Ausgabe) wäre ebenfalls interessant, denn da kannst du genauer sehen, welche Werte PHP erreichen. Das %26 wird von mod_rewrite in ein einfaches & gewandelt (siehe unten), weswegen PHP es als Parametertrennzeichen ansieht.

Der Eintrag in der .htaccess sieht so aus:
RewriteEngine on
RewriteRule test_(.*).html$ test.php?var=$1

[...]

Die rewrite_log sieht so aus:
applying pattern 'test_(.*).html$' to uri 'test_Bremen+&+Oldenburg.html'

[...]

Man sieht, dass er aus dem %26 in der URL direkt ein &-Zeichen gemacht hat. Das dürfte das Problem sein... aber ich frage mich, wieso er %26 in ein & umwandelt, wo ich es doch extra mit urlencode() maskiert habe, damit es KEINE probleme gibt...

Schau dir im Apache-Handbuch zu RewriteRule die Beschreibung des Flags B (escape backreferences) an. Das dürfte deines Rätsels Lösung sein.

echo "$verabschiedung $name";