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";