Hi!
Seht Ihr einen Unterschied, der dieses Verhalten erklärt?
PHP hat etwas andere Regeln für die Stringnotation als Javascript. Du lässt dir zwar $characterSet ausgeben (was du vermutlich wegen nicht beachtetem Kontextwechsel zu HTML ohne HTML-spezifische Behandlung machst - Stichwort htmlspecialchars()), schaust aber anscheinend nicht genau hin.
Vielen Dank für nen Tipp.
Das erste Zeichen im "verschlüsselten" String liegt vor dem ' alle anderen dahinter.
Außerdem ist bei dem folgenden Code-Ausschnitt die erste Zeile falsch:
if ($characterMap[$currentChar]) {
$toReturn .= $characterMap [$currentChar];
} else {
$toReturn .= $currentChar;
}
Sie erzeugt nicht nur eine Notice, wenn du das error_reporting auf E_ALL stehen hättest. Ein Unterstrich im verschlüsselten Wert sollte zu 0 auflösen, doch diese Zeile ergibt false, weswegen er nicht dekodiert wird. Du prüfst nicht, ob $characterMap[$currentChar] existiert (dafür wäre isset() geeigneter), sondern testest das Ausdrucksergebnis auf einen boolschen Wert. Ein String mit dem Inhalt 0 ergibt false aufgrund PHPs eingebauter Typumwandlung ('_' => '0').
Lo!