[PHP] Eckige Klammer ersetzen

M3Y3R

Well-known member
ID: 336361
L
8 Mai 2006
1.608
60
Hallo,

ich habe in einem String eine eckige Klammer "[".
Diese möchte ich über eine Funktion ersetzen lassen.

PHP:
function setChars($string){
	$searchedChars = array('[', ']');
	$replacedChars = array('[[.left-square-bracket.]]', '[[.right-square-bracket.]]');
	$message = str_replace($searchedChars, $replacedChars, $string);	
	return $message;
}

Wenn nun folgender String, diese Funktion durchläuft:
Test[TestTest] 12345

erhalte ich folgendes zurück:
Test[[.left-square-bracket.[[.right-square-bracket.]][[.right-square-bracket.]]TestTest[[.right-square-bracket.]] 12345

Was ja falsch ist. Wie kann ich das richtig ersetzen lassen?

Danke!


MFG
Papenburger
 
Zuerst werden alle [ ersetzt (1 Mal).
Der String sieht dann so aus:
Test[[.left-square-bracket.]]TestTest] 12345
Danach werden alle ] ersetzt (3 Mal):
Der String sieht dann so aus:
Test[[.left-square-bracket.[[.right-square-bracket.]][[.right-square-bracket.]]TestTest[[.right-square-bracket.]] 12345
Zum Vergleich deine Ausgabe:
Test[[.left-square-bracket.[[.right-square-bracket.]][[.right-square-bracket.]]TestTest[[.right-square-bracket.]] 12345
OK? ;)

Ach so und ich müsste es mit Zwischenschritt machen, aber da gibt es eventuell/sicherlich bessere Möglichkeiten.
 
strtr() hilft hier nicht wirklich weiter, da es nur Zeichen gegen andere Zeichen (nicht Strings) ersetzt.

Ich würde wahrscheinlich den String Zeichen für Zeichen durchgehen, die Zeichen prüfen und dementsprechend den neuen String aufbauen. Kein Plan, ob es die effizienteste Methodik ist, aber sie funktioniert und dürfte eigentlich auch nicht so sehr auf die Performance gehen...
 
Man könnte auch [ in erst in eine andere Zeichenkette umwandeln z.B. "%%%". Dann ] in "[[.right-square-bracket.]]" und dann wieder "%%%" in "[[.left-square-bracket.]]".
Die "%%%" Zeichenkette darf dann natürlich nicht einfach so im Text vorkommen. Vielleicht vorher prüfen oder etwas ganz außergewöhnliches nehmen(Ein md5 hash oder so.)

Wie performativ diese Lösung gegen über der von tleilax ist kann ich nicht sagen.

Henne

edit:
theHacker war schneller und ich glaube seine Lösung ist die schönste :)