dedlfix: Get Parameter mit eingebauten get-Parametern

Beitrag lesen

echo $begrüßung;

[urlencode() vs. rawurlencode()]

Die Klärung des Unterschiedes habe ich schon lange auf meinem Zettel.

Die Beispiele im Handbuch geben für urlencode() den Querystring als Einsatzort an und den Pfadteil für rawurlencode(). Der Unterschied ist, dass das Leerzeichen bei urlencode() zum + wird und bei rawurlencode() zu %20. urlencode() ist für den Pfad nicht verwendbar, weil das + von PHP (von anderen Auswertenden sicher auch) dort als + interpretiert wird, nicht als Leerzeichen. Andererseits wird ein %20 im Querystring auch als Leerzeichen erkannt. Ich muss mich also etwas korrigieren. Im Querystring kann sowohl urlencode() als auch rawurlencode() gleichermaßen verwendet werden. Für den Pfad-Teil ist jedoch nur rawurlencode() zu verwenden.

Versuchsaufbau:

Apache mit aktiviertem AcceptPathInfo

test.php:
  <pre>
  <?php
  var_dump($_GET['test']);
  var_dump($_SERVER['PATH_INFO']);

Aufrufen über:

http://.../test.php/foo+bar?test=foo+bar
  http://.../test.php/foo%20bar?test=foo%20bar

Die erste URL simuliert das Verhalten von urlencode().

string(7) "foo bar"
  string(8) "/foo+bar"

Die zweite entspricht rawurlencode().

string(7) "foo bar"
  string(8) "/foo bar"

Könnte ungefähr genauso aufschlussreich werden, wie der Unterschied zwischen htmlspecialchars() und htmlentities()...

Wozu brauchst du das was htmlentities() extra zu htmlspecialchars() macht, wenn du doch mit einer passenden charset-Angabe im Content-Type-Header die Zeichen direkt kodiert notieren kannst. Um htmlentities() nutzen zu können brauchst du auf alle Fälle das Wissen, in welcher Kodierung die ursprüngliche Zeichenfolge vorliegt. Dieses Wissen kannst du auch in die charset-Angabe schreiben.

Als ein mögliches Anwendungsbeispiel für htmlentities() kann meiner Meinung nach allenfalls eine historische Anwendung herhalten, bei der große Teile (des Templates) bereits in einer bestimmten Kodierung vorliegen, die aber für die darin einzuarbeitenden Daten aus aktuellen Gründen nicht mehr reicht (z.B. Zeichen jenseits von ISO-8859-1 sollen verwendet werden).

Man wird damit aber möglicherweise nicht glücklich. Besonders dann, wenn die Anwender Daten eingeben sollen, und dabei von diesen "exotischen" Zeichen Gebrauch machen, kann sie der Browser nicht gemäß der Kodierung der Seite an den Server liefern. Was er daraus zu machen hat, ist nicht definiert. Einige nehmen NCRs. Doch dann hast du ein Problem, das Browser-Ersatz-NCR von einer durch den Benutzer eingegebenen Zeichenfolge, die den Regeln einer NCR entspricht, zu unterscheiden.

echo "$verabschiedung $name";