Replace
mixmastertobsi
- php
0 suit0 dedlfix0 mixmastertobsi0 dedlfix
0 Sven Rautenberg
0 dedlfix
Hallo,
ich habe mal eine ganz simple Frage
Wo ist denn der Unterschied zwischen folgenden Funktionen
strtr()
str_replace()
preg_replace()
ereg_replace()
Wo ist denn der Unterschied zwischen folgenden Funktionen
strtr()
str_replace()
Der Unterschied ist historisch und sehr marginal.
strtr() überträgt einzelne Zeichen von Zeichenketten in andere:
strtr('äste, böller und büsche', 'äöü', 'aou');
Das kann str_replace() nicht.
Es kommt auf den Anwendungsfall an - strtr() braucht man eigentlich nur sehr selten weil beim Ersetzen von Zeichenketten durch andere (oder mehreren durch mehrere andere) str_replace() wesentlich schneller ist.
preg_replace()
ereg_replace()
Ersetzen mit regulären Ausdrücken - 1x PCRE (preg) und 1x POSIX (ereg).
Hi!
Wo ist denn der Unterschied zwischen folgenden Funktionen
strtr()
str_replace()Der Unterschied ist historisch und sehr marginal.
Ich sehe eher zwei Anwendungsfälle. str_replace tauscht beliebig lange Stringteile durch beliebig andere Stringteile aus. strtr() war wohl eher gedacht, um einzelne Zeichen zu übersetzen, beispielsweise zwischen zwei (1-Byte-)Kodierungen. Doch ...
strtr() überträgt einzelne Zeichen von Zeichenketten in andere:
strtr('äste, böller und büsche', 'äöü', 'aou');
... strtr() kennt auch eine zweite Aufrufvariante, die größere Stringteile ersetzen kann. Und dabei ist die Übergabe der Such- und Ergänzungsstrings in einem Array besser gelöst als bei str_replace() mit seinen zwei getrennten Arrays. Allerdings hat auch die Arbeitsweise von str_replace() ihre Berechtigung, denn mit einem einzelnen Array kann man zwar schön Ersetzungspaare abbilden, aber nicht wenn man eine ganze Liste von Teilstrings in nur einen einzelnen wandeln will.
Das kann str_replace() nicht.
Doch, das kann es auch, nur muss man da die Zeichen als Array-Elemente übergeben.
Es kommt auf den Anwendungsfall an - strtr() braucht man eigentlich nur sehr selten weil beim Ersetzen von Zeichenketten durch andere (oder mehreren durch mehrere andere) str_replace() wesentlich schneller ist.
Ach!? Eben schienst du nicht zu wissen, dass strtr() nicht nur Einzelzeichen bearbeitet und nun sprichst du doch von "Ersetzen von Zeichenketten"? Wenn du wirklich davon ausgehst, einzelne Zeichen zu ersetzen, so ist str_replace() nicht mit strtr() vergleichbar, denn es berücksichtigt beim Abarbeiten des Suchstring-Arrays bereits eingesetzte Teile nicht, strtr() hingegen schon.
(Beide Funktionen arbeiten nur mit 1-Byte-Codierung, weswegen sich "Zeichen" auch nur auf solche mit einem Byte beziehen.)
Lo!
Ich sehe eher zwei Anwendungsfälle.
Das ist richtig, aber mittlerweile sind - bis auf das von mir erwähnte detail - beide Funktionen ziemlich gleichwertig.
Das kann str_replace() nicht.
Doch, das kann es auch, nur muss man da die Zeichen als Array-Elemente übergeben.
Natürlich geht das auch mit str_replace() - aber das ist entspricht dann der anderen Variante von strtr() welches ebenfalls mit arrays gefüttert wird. Ich meinte mit "kann das nicht" lediglich, dass die bequeme Form eben nicht funktioniert
wenn man ä -> ae usw ersetzen möchte, kommt man um Arrays zum Füttern ohnehin nicht herum. Dann hat man (mit ausnahme der Performance) keinen nennenswerten Unterschie zwischen den beiden Funktionen.
Ach!? Eben schienst du nicht zu wissen, dass strtr() nicht nur Einzelzeichen bearbeitet und nun sprichst du doch von "Ersetzen von Zeichenketten"?
Eh klar ;) der Schein hat getrügt.
Wenn du wirklich davon ausgehst, einzelne Zeichen zu ersetzen, so ist str_replace() nicht mit strtr() vergleichbar, denn es berücksichtigt beim Abarbeiten des Suchstring-Arrays bereits eingesetzte Teile nicht, strtr() hingegen schon.
Erwischt, das wusste ich nicht.
Mit "Zeichenketten" meinte ich aber eher Geschichten wie ae -> æ :)
Hello,
Ich sehe eher zwei Anwendungsfälle. str_replace tauscht beliebig lange Stringteile durch beliebig andere Stringteile aus. strtr() war wohl eher gedacht, um einzelne Zeichen zu übersetzen, beispielsweise zwischen zwei (1-Byte-)Kodierungen. Doch ...
Der Unterschied liegt noch in der Abarbeitungshierarchie.
Str_Replace() im Array-Modus ist quasi-rekursiv. Das bedeutet, dass zuvor getauschte Sequenzen, wenn sie dann für nachfolgende noch zu tauschende wieder Treffer ergeben, erneut getauscht werden.
Eben das verhindert der Tauschalgorithmus von String-Translate ( = strtr() ).
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
OK. Vielen Dank für die Erklärung.
Und worin unterscheidet sich dann ereg_replace und preg_replace
Hi!
Und worin unterscheidet sich dann ereg_replace und preg_replace
Du solltst dir wenigstens die Mühe machen, die Handbuchseiten zu lesen, bevor du Fragen stellst. Vergiss einfach, dass es die ereg-Funktionen gibt, die stehen auf der Abschussliste. Wenn du doch mehr darüber wissen willst, recherchiere bitte erst einmal selbst.
Lo!
Moin!
Der Unterschied ist historisch und sehr marginal.
strtr() überträgt einzelne Zeichen von Zeichenketten in andere:
strtr('äste, böller und büsche', 'äöü', 'aou');
Das kann str_replace() nicht.
Hängt davon ab, was man unter "können" versteht.
str_replace(array('ä','ö','ü'), array('a','o','u'), 'äste, böller und büsche')
Liefert dasselbe Ergebnis.
Pluspunkt: Das funktioniert sogar noch, wenn man UTF-8 benutzt. strtr() scheitert dort in der obigen Form.
Die Alternativform kriegt es allerdings wieder hin:
strtr('äste, böller und büsche', array('ä' => 'a', 'ö' => 'o', 'ü' => 'u'))
- Sven Rautenberg
Hi!
Wo ist denn der Unterschied zwischen folgenden Funktionen
strtr()
str_replace()
preg_replace()
ereg_replace()
Formuliere bitte deine noch übrig gebliebene(n) Frage(n) genauer, nachdem du die jeweiligen Seiten im PHP-Handbuch gelesen hast.
Lo!