Sprachwechsel
Dies ist ein Schprachschalter. Links rufen die sie beherbergende Seite wieder auf und wechseln entsprechend ihres (im Querrystring) übermittelten Wertes die Erscheinung der Seite. So werden Variablennamen verändert bzw. verlängert.
Sich selbst aufrufen
Diese Selbstfindung ist nur sinnvoll, wenn ein ausgelagertes Script mehrmals genutzt wird, wodurch es in verschiedene Dateien geladen wird.Die superglobale Variable $_SERVER['PHP_SELF'] findet heraus wo sie sich befindet -
so lade ich die Datei mit dem Skript erneut.
Wähle einen Sprach-Link
Variablen übermitteln durch Link
htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES)
Die Sprachreferenz (als Variable/Wert-Paar) wird dem Bild-Link durch ein Fragezeichen angehängt,
dadurch wird sie mit der method='GET' übermittelt und zeigt sich in der Adresszeile als Querystring.
Zur Verhinderung von eingeschleusstem Code werden die gefährlichen Zeichen in der Variablen PHP_SELF durch
htmlspecialchars umgewandelt:
<a href="<?php echo htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES) ?>?Lang=DE">
<img src="images/fl_de.gif" alt="deutsch" width="22" height="12" border="0" /></a>
Variablen aus Querystring einlesen
Da ich die Informationen aus der Adresszeile einlese, könnte sich in der Variablen '$_GET["Lang"]' irgend ein Wert, also auch schädlicher Code, befinden. Darum darf ich die Variable nicht einfach in $Lang überführen und ausgeben, ich muss sie mit meinen Erwartungen vergleichen und wenn diese erfüllt sind, kann ich entsprechend die Variable $Lang selber setzen. Aber eigentlich ausgeben tue ich somit überhaupt gar keine irgendwoher geholte Benutzereingabe!
<?php
// Lang-Variable holen oder machen
if (isset($_GET["Lang"])) { // is set
if ($_GET["Lang"] == "DE") {$Lang="DE";}
elseif ($_GET["Lang"] == "EN") {$Lang="EN";}
} else { // is not set
$Lang="DE"; // preset
}
// Gefährliche Variante
if (isset($_GET["Lang"])) { // is set
$Lang=$_GET["Lang"]; // akzeptiert irgend etwas ohne Prüfung
} else { // is not set
$Lang="DE"; // preset
}
?>
Die übersetzten Textvarianten
Die Variablen-Namen der übersetzten Textfragmente sind zweiteilig. Vorne bestimmen sie ihren Inhalt und hinten ihre Sprache.
<?php
// Text-Variablen setzen
$selbstDE="Sich selbst aufrufen";
$selbstEN="Play your self";
$flagDE="Wähle einen Sprach-Link";
$flagEN="Select a language link";
$superDE="Die superglobale Variable \$_SERVER['PHP_SELF'] findet heraus wo sie sich befindet
- so lade ich die Datei mit dem Skript erneut.";
$superEN="The superglobal variable \$_SERVER['PHP_SELF'] stores its filepath
- thats how I reload this same page.";
?>
Zusammengesetzter Variablen-Namen
${variable.$variable}
Je nach Sprachwahl mittels Flagge, muss ich also den entsprechenden Variablen-Namen konstruieren; das bedeutet, die Variablen-Namen sind variabel.
<h2><?php echo "${selbst.$Lang}"; // Titel ?></h2>
<?php echo "${super.$Lang}"; // Text ?>
<h3><?php echo "${flag.$Lang}"; // Untertitel ?></h3>