Ich habe einige Probleme mit der PHP-Funktion str_replace
bei der Verwendung von Arrays.
Ich habe diese Meldung:
$message = strtolower("L rzzo rwldd ty esp mtdsza'd szdepw ty esp opgtw'd dple");
Und ich versuche, str_replace
wie folgt zu verwenden:
$new_message = str_replace(
array('l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k'),
array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'),
$message);
Das Ergebnis sollte A good glass in the bishop's hostel in the devil's seat
sein, aber stattdessen bekomme ich p voos vlpss xn twt qxswop's wosttl xn twt stvxl's stpt
.
Wenn ich jedoch nur 2 Buchstaben ersetze, werden sie gut ersetzt:
$new_message = str_replace(array('l','p'), array('a','e'), $message);
die Buchstaben l
und p
werden durch a
und e
ersetzt.
Warum funktioniert es nicht mit dem vollen Alphabet-Array, wenn beide genau gleich groß sind?
Da str_replace() von links nach rechts ersetzt, kann es bei mehrfachen Ersetzungen einen zuvor eingefügten Wert ersetzen.
// Gibt F aus, weil A durch B ersetzt wird, dann wird B durch C ersetzt, und so weiter... // Schließlich wird E durch F ersetzt, da die Ersetzungen von links nach rechts erfolgen. $search = array('A', 'B', 'C', 'D', 'E'); $replace = array('B', 'C', 'D', 'E', 'F'); $subject = 'A'; echo str_replace($search, $replace, $subject);
str_replace
mit Arrays führt einfach alle Ersetzungen nacheinander durch. Verwenden Sie stattdessen strtr
, um alle Ersetzungen auf einmal durchzuführen:
$new_message = strtr($message, 'lmnopq...', 'abcdef...');
Einfach und besser als str_replace
:
<?php
$arr = array(
"http://" => "http://www.",
"w" => "W",
"d" => "D");
$word = "http://desiweb.ir";
echo strtr($word,$arr);
?>
strtr
PHP doc hier