Suchen und Ersetzen innerhalb von PHP
Sie befinden sich: Home > Php
> Suchen
und Ersetzen innerhalb von PHP
Für das Suchen und Ersetzen gibt
es verschiedene Möglichkeiten innerhalb
von PHP. Wir möchten Ihnen vor allem
folgende Methoden aufzeigen:
ereg_replace(),
str_replace()
und preg_match().
Zunächst möchten wir Ihnen diesen
drei Methoden näher bringen, um Ihnen
danach anhand von Quelltexten Ihnen die
Funktionsweise aufzuzeigen.
I. ereg_replace()
ereg_replace ist eine Methode, welche
innerhalb eines Textes ein von Ihnen
bestimmtes Suchwort sucht und dieses
gegen ein von Ihnen gewünschtes
Wort ersetzt.
Beachten Sie bitte dabei folgende
Aspekte: Es ist wichtig,
dass man bei Benutzung dieser Methode
auf die Groß- und Kleinschreibung
des zu suchenden Wortes achtet, denn
diese Funktion unterscheidet dazwischen.
So wird bei dem Suchwort 'bin' jedes
Großgeschriebene 'BIN' im Text übergangen.
Als weiteres gilt, dass wenn sie
Zahlen ausgetauscht haben möchten,
dass Sie diese in Hochkommas setzen,
damit das Programm die Zahl nicht
als eigenständige Zahl, sondern
als Zeichen erkennt, denn nur dann
kann es dieses auch als Ersetzungsmöglichkeit
anerkennen.
Die Function ereg_replace() wird
wie folgt aufgerufen:
<?php
$neuer_text = ereg_replace('zu suchender Text' ,
'ersetzender Text' , $alter_text);
?>
Quelltext-Beispiel:
<?php
echo 'Hier ein Beispiel, dass Zahlen
hier leider nicht so genutzt werden können<br>';
$zahl = 5;
$txt = 'Auf der Weide vor
meinem Haus stehen fünf Schafe<br>';
echo $txt;
$txt = ereg_replace ('fünf', $zahl, $txt );
echo $txt;
?>
Ausgabe :
Hier ein Beispiel, dass Zahlen hier leider
nicht so genutzt werden können
Auf der Weide vor meinem Haus stehen
fünf Schafe
Auf der Weide vor meinem Haus stehen
Schafe
Schreiben wir nun die gewünschte
Zahl in Hochkommas, damit sie als Zeichen
und nicht als Zahl erkannt wird, wird
das Wort fünf durch die Ziffer 5
ersetzt.
Beispiel :
<?php
echo 'Hier ein Beispiel, dass Zahlen
hier leider nicht so genutzt werden können<br>';
$zahl = '5';
$txt = 'Auf der Weide vor
meinem Haus stehen fünf Schafe<br>';
echo $txt;
$txt = ereg_replace ('fünf', $zahl, $txt );
echo $txt;
?>
Ausgabe :
Hier ein Beispiel, dass Zahlen hier leider
nicht so genutzt werden können
Auf der Weide vor meinem Haus stehen
fünf Schafe
Auf der Weide vor meinem Haus stehen
5 Schafe
II. str_replace()
Auch str_replace sucht aus einer Ansammlung
von Zeichen sich den gewünschten
Wortlaut oder Buchstaben raus und ersetzt
ihn durch einen Neuen. Auch hier gilt
auf die genaue Groß- und Kleinschreibung
zu achten, damit die Methode all die
von Ihnen gewünschten Worte finden
kann.
Die Syntax hierzu lautet :
<?php
$neuer_text = str_replace("gesuchter Text", "Ersetzung_durch","Zeichenfolge");
?>
Quelltext-Beispiel:
<?php
$wort = "Klettergerüst";
echo str_replace("Kletter", "Kinder", $wort);
?>
Ausgabe:
Kindergerüst
Natürlich kann man auch die Abfrage
mit Arrays machen.
Man braucht dabei zwei Arrays. Das erste
Array enthält die zu suchenden Wörter.
Das zweite Wort enthält die Wörter,
die die alten Wörter ersetzen soll.
Beachten Sie bitte dabei, dass Sie das
gesuchte Wort und das Wort das Sie dadurch
auswechseln wollen in beiden Arrays an
dieselbe Stelle im Array schreiben!
Beispiel :
<?php
$text = "In diesen Test möchten wir die ";
$text .= "Wörter: Sonne, Flut und Erde ersetzen.<br>";
echo $text;
/**
* $array_suche zusammen bauen
*/
$array_suche[0] = "Erde";
$array_suche[1] = "Sonne";
$array_suche[2] = "Flut";
/**
* $array_ersetzen zusammen bauen
*/
$array_ersetzen[0] = "Sand";
$array_ersetzen[1] = "Mond";
$array_ersetzen[2] = "Ebbe";
$neuer_text = str_replace($array_suche, $array_ersetzen,
$text);
echo $neuer_text;
?>
Ausgabe:
In diesen Test möchten wir die
Wörter: Sonne, Flut und Erde ersetzen.
In diesen Test möchten wir die Wörter:
Mond, Ebbe und Sand ersetzen.
Achten Sie nicht auf die Reihenfolge
bei den Array`s, kann es dazu kommen,
dass Sie nicht das erwünschte Ergebnis
bekommen. Mann kann natürlich jedes
Array Element einzeln ersetzen, das könnte
man z.b. mit eine for()
Schleife machen.
Dazu möchten wir Ihnen ein weiteres
Beispiel aufzeigen:
<?php
$text = 'Wenn ich wüsste was ich möchte, ';
$text .= 'wäre die Entscheidung nur halb <br>';
echo $text;
$zeichen = array ("ü", "ö", "ä");
$ersetzen = array ("ue", "oe", "ae");
/**
* Mit einer for() Schleife jedes Zeichen
* einzeln ersetzten.
*/
for ($x = 0; $x < 4; $x++ ) {
$text = str_replace ($zeichen[$x], $ersetzen[$x],
$text );
echo $text;
}
?>
Ausgabe:
Wenn ich wüsste was ich möchte,
wäre die Entscheidung nur halb
Wenn ich wuesste was ich möchte,
wäre die Entscheidung nur halb
Wenn ich wuesste was ich moechte, wäre
die Entscheidung nur halb
Wenn ich wuesste was ich moechte, waere
die Entscheidung nur halb
Wenn ich wuesste was ich moechte, waere
die Entscheidung nur halb
Natürlich muss man nicht unbedingt
eine for Schleife verwenden um z.B. mehrere
Buchstaben zu ersetzen. Man hat bei der
Funktion str_replace() mit der Verbindung
array_keys() und array_values() die Möglichkeit,
mehrere Buchstaben zu ersetzen. Nachfolgend
finden sie ein Beispiel, womit man bei
einem Dateinamen, alle Umlaute sowie
Sonderzeichen ersetzen kann.
Beispiel für Umlaute im Dateinamen
ersetzen:
<?php
$filename = 'ärger müller.jpg';
$umlaute = array(
'ä' => 'ae',
'Ä' => 'ae',
'ß' => 'ss',
'ö' => 'oe',
'Ö' => 'oe',
'ü' => 'ue',
'ü' => 'ue',
' ' => '-',
'à' => 'a',
'è' => 'e',
'ê' => 'e'
);
$filename = str_replace(array_keys($umlaute),
array_values($umlaute), $filename);
echo $filename;
?>
Ausgabe:
aerger-mueller.jpg
Eine weitere Erklärung der PHP-Funktion
str_replace() finden Sie in unserer Tutorial
Datenbank. Bei dieser Erklärung, wird
erklärt wie man "Das
Vorkommen eines Zeichens in einer Zeichenkette
suchen und mit einer eigenen String ersetzen" kann.
III. preg_match()
Über preg_match() lässt
man innerhalb eines Textes nach einem gewünschten
regulären Ausdruck suchen und die
gefundene Treffer anzahl zu protokolieren.
Syntax :
<?php
$neuer_text = preg_match(
'Zu suchender Ausdruck' ,
'innerhalb dieses Textes' ,
$rueckgaben_array,
PREG_OFFSET_CAPTURE = Angebe_gefunden_ab_zeile,
Start_ab_beliebigen_Byte );
?>
Quelltext-Beispiel mit der Angabe von
PREG_OFFSET_CAPTURE:
<?php
$text = "Affenschaukel";
$suche = '/^schaukel/';
preg_match($suche, substr($text, 5), $array,
PREG_OFFSET_CAPTURE);
print_r($array);
?>
Es würde nun folgende Ausgabe erzeugt
werden:
Array
(
[0] => Array
(
[0] => schaukel
[1] => 0
)
)
Quelltext-Beispiel ohne der Angabe von
PREG_OFFSET_CAPTURE:
<?php
$text = "ersttextunddannzahl716767diese
rtextwirdnichtgefunden";
$suche = '/([a-zA-Z]{1,4})([0-9]{1,7})/is';
preg_match($suche, $text, $array);
print_r($array);
?>
Ausgabe:
Array
(
[0]
=> zahl716767
[1]
=> zahl
[2]
=> 716767
)
Desweiteren möchten wir Sie auf
Sonderzeichen aufmerksam machen. Unlesbare
Sonderzeichen treten ungewollt auf, wenn
man zum Beispiel beim Aufbau seiner Homepage
auf das Charset UTF-8 benutzt. Dabei
werden alle Umlaute oder andere Sonderzeichen,
wie Punkte, Komma, Backslashs usw ,in “named
entities” übersetzt werden
und dadurch kaum noch zu lesen, sondern
nur noch zu erraten werden für die
Leser.
ä = ä , ö = ö ..usw.
natürlich kann man dieses Problem
beheben, wenn man zum Beispiel eine der
oben genannten Methoden benutzt um diese
Zeichen auszuwechseln. Man kann natürlich
dann jeden Schritt einzeln vollziehen,
dies jedoch führt zu einem sehr
langen, möglicherweise unübersichtlichen
Quelltext mit sehr viel Arbeit führt,
oder man benutzt hier bei eine Schleifenfunktion
und zwei Arrays.
In dem ersten Array sollten die gesuchten
Zeichenfolgen enthalten sein, in dem
zweiten Array die Richtigstellung dieser
Zeichenfolgen. Die Schleife sollte dann
genau darauf abgestimmt sein all diese
Zeichen zu erreichen und zu ersetzen,
damit Ihr Text wieder für jeden
klar lesbar wird.
Anm.: Alternativ kann man auch noch den PHP Befehl strtr()
für den austausch von Zeichen in einer Zeichenkette mit einer Austauschliste verwenden.
Dieser eignet sich besonders gut, wenn man zum Beispiel kaputte Umlaute über ein
Mehrdimensionales Array innerhalb eines Textes ersetzen möchte.
weiter zum nächsten Kapitel: Php
Sessions
|