Suchen und Ersetzen mit PHP

Navigation
 Startseite
 Fachbücher
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 
Script Seite

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 ICQ Generator
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog Verzeichnis

Partner
Sprüche Treff

Goneo.de
Bei diesen Anbieter bekommt man Webspace, Domains,...
http://www.Goneo.de
pixelx.de
Bei diesen Anbieter bekommt man verschiedene Webho...
http://www.pixelx.de
 
 

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