Last update: 29.03.2008 | © 2024 Julian von Mendel | Datenschutz
Wenn man Usereingaben in einer Textdatei speichern möchte, z. B. für ein Gästebuch, muss man die Eingaben maskieren. D. h. wenn man folgendes Datenformat verwendet «Zeit|Name|Text\nZeit|Name|Text», dass verhindert werden muss, das ein User das Gästebuch verwirrt, in dem er in seinen Text ein «|» schreibt. Dazu kann man z. B. festlegen, dass man ein «|» durch «\1», «\n» durch «\2» und ein «\» durch «\3» ersetzt. Meine Klasse macht das automatisch: Man sagt ihr, welche Zeichen nicht im Text vorkommen dürfen, und welches Zeichen zum Maskieren verwendet werden soll. Hier ein Beispiel:
<?php
$r1 = new replace("\n|"); // Es dürfen weder Zeilenumbrüche noch Trennstriche mit in die Datei gespeichert werden
$maskiert = $r1->modify("Hallo!\nIch|habe|viele|Trennstriche und ein \Backslash.");
echo $maskiert."\n\n";
$r2 = new replace("\n|");
$r2->invert(); // Durch das invert() wird der Klasse gesagt, dass jetzt demaskiert werden soll
$demaskiert = $r2->modify($maskiert);
echo $demaskiert."\n";
?>
Manchmal möchte man sich zu ersetzende Zeichenketten merken, und dann auf unterschiedliche Zeichenketten oder Arrays anwenden, zwischendrin die zu ersetzenden Zeichenketten vielleicht noch ergänzen, invertieren. Oder man möchte nur die jeweils ersten Vorkommnisse im Text ersetzen. (Sicherlich. Das geht auch mit den Standard-PHP-Funktionen relativ leicht. Aber nicht so übersichtlich und komfortabel.)
<?php
$r1 = new replace;
$r1->add("abc","123");
$r1->add("foo","bar");
$output1 = $r1->modify($input);
$r1->invert(); // invertiert
$output2 = $r1->modify($input);
$r1->replaceonlyfirstoccurrences(); // invertiert & nur erste Vorkommnisse werden ersetzt
$output3 = $r1->modify($input);
$r1->invert(False); // invertiert aus
$r1->replaceonlyfirstoccurrences(False); // nur erstes Vorkommnis ersetzen aus
$r1->clear(); // Regeln zurückgesetzt
?>
Die statische Funktion firstoccurrence() kann wie str_replace aufgerufen werden. Sie ersetzt das erste Vorkommnis einer Zeichenkette. Momentan unterstützt sie noch keine Arrays als Parameter — wer das braucht, soll's in 10 Zeilen einbauen und mir schicken ;)
<?php
Die statische Funktion between() sucht eine zwischen zwei anderen liegende Zeichenkette.
echo replace::firstoccurrence("test","hehe","test, test, test"); // => hehe, test, test
?>
<?php
Quellcode ansehen | Herunterladen
echo replace::between("abc[b]strong[/b]","[b]","[/b]"); // => strong
?>
© 2009 Julian von Mendel (http://derjulian.net) | Datum: 09.09.2024