Suchmaschinenoptimierung
   
 

SEMSEO Konferenz 2012
 

 
 

str_replace nur einmal ausführen

Gehe zu Seite Zurück  1, 2, 3  Weiter
Neues Thema eröffnen   Neue Antwort erstellen    ABAKUS Foren-Übersicht -> Webprogrammierung, Templatedesign & Microformats
 Bilder aus Ordner laden Sidebar in anchen Browsern abgeschmiert  
Synonym

pr


: 09.08.2008
: 3354
: Würzburg


: 10.02.2010, 11:39    : str_replace nur einmal ausführen Antworten mit Zitat

Ach so meintest Du das. Gehen tut das sehr wohl, das ist klar, dann macht nur das "limit" keinen wirklichen Sinn. Geht würde es auch mit preg_match_all und tokenizer

Aber ein Nachtrag:
Ich würde schon prüfen, ob es strrpos() überhaupt gibt, sonst setzt substr_replace das Ersatzwort immer an den Anfang des Strings (Pos 0) wenn es den Suchbegriff nicht gibt.
Nach oben
Synonym Private Nachricht senden
SloMo

pr


: 04.01.2005
: 4027



: 10.02.2010, 12:02    : str_replace nur einmal ausführen Antworten mit Zitat

Das mit der Pos 0 ist ein guter Punkt. Ich hoffe, der OP liest das. Es ist für die Performance-Sache aber eher unerheblich. Zumal der OP fragt, wie er einen Teilstring ersetzen kann (nicht, wie man ihn ersetzen könnte, falls er existiert). Genau genommen wäre der Check dieser Aufgabenstellung gemäß sogar überflüssig und müsste Punktabzug geben.
Nach oben
SloMo Private Nachricht senden
Synonym

pr


: 09.08.2008
: 3354
: Würzburg


: 10.02.2010, 12:25    : str_replace nur einmal ausführen Antworten mit Zitat

setzen 5 - Thema verfehlt
Nach oben
Synonym Private Nachricht senden
w3news

pr


: 10.10.2006
: 939
: Berlin


: 10.02.2010, 14:41    : str_replace nur einmal ausführen Antworten mit Zitat

Das mit der Position null habe ich mit einer if abfrage gelöst:

Code:
if ($url !== false)
  // Weitermachen...


Steht so im Manual, was ich dann doch etwas intensiver gelesen habe.

@SloMo
Es kann schon vorkommen, dass der gesuchte String nicht vorkommt, im endgültigen Skript werden mehrere Wörter abgefragt, aber das hatte ich nicht gefragt und konntest du ja auch nicht wissen, da ich das dann doch selber hinbekommen habe.

MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates
Nach oben
w3news Private Nachricht senden E-Mail senden
mgutt

pr


: 08.03.2005
: 3135



: 10.02.2010, 14:49    : str_replace nur einmal ausführen Antworten mit Zitat

SloMo hat Folgendes geschrieben:
Fazit:
Die PREG-Variante ist gut 50 Prozent langsamer!


Ok, ich geb mich geschlagen

Aber Du hattest keine Bedingung drin, ob überhaupt ersetzt werden kann . Das war gefuscht

» Adsense & Vibrant Alternative
» Ankauf von Communities und Forendomains
Nach oben
mgutt Private Nachricht senden
SloMo

pr


: 04.01.2005
: 4027



: 10.02.2010, 15:04    : str_replace nur einmal ausführen Antworten mit Zitat

Code:
if ($start===false) throw new Exception('Ungültiger Eingabestring');


Nach oben
SloMo Private Nachricht senden
w3news

pr


: 10.10.2006
: 939
: Berlin


: 10.02.2010, 15:11    : str_replace nur einmal ausführen Antworten mit Zitat

Die if Abfrage ist in einer While Schleife und so müsste ich noch ein else machen, was ja gar nicht nötig ist. Das Ersetzen war ja nur der eine kleine Teil Aufgabe.

MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates
Nach oben
w3news Private Nachricht senden E-Mail senden
SloMo

pr


: 04.01.2005
: 4027



: 10.02.2010, 15:21    : str_replace nur einmal ausführen Antworten mit Zitat

Jaja, war ja nur ein Spaß mit der Exception... man kann so einen Fehlerfall (sofern es per Definition einer ist) auf unterschiedliche Arten behandeln. Für Dich wäre wohl die folgende Zeile am kompaktesten:

if ($start===false) continue;

Das erspart Dir den if-Block mit den geschweiften Klammern. Die while-Schleife fährt dann im Fehlerfalle direkt beim while fort.
Nach oben
SloMo Private Nachricht senden
w3news

pr


: 10.10.2006
: 939
: Berlin


: 11.02.2010, 18:39    : str_replace nur einmal ausführen Antworten mit Zitat

Mal noch ne andere Frage, wie kann ich eigentlich das Suchmuster auf exakt stellen?

So ersetzt er ja beim Suchmuster "test" auch "testen",...

MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates
Nach oben
w3news Private Nachricht senden E-Mail senden
profo

pr


: 18.01.2007
: 1709



: 11.02.2010, 18:53    : str_replace nur einmal ausführen Antworten mit Zitat

Code:
$url = preg_replace('/\bTest\b/', 'Test2', $url, 1);

Das \b ist eine Wortgrenze.

Ceterum censeo facebook esse delendam.
Nach oben
profo Private Nachricht senden
mgutt

pr


: 08.03.2005
: 3135



: 11.02.2010, 18:57    : str_replace nur einmal ausführen Antworten mit Zitat

Und schon hat preg gewonnen

» Adsense & Vibrant Alternative
» Ankauf von Communities und Forendomains
Nach oben
mgutt Private Nachricht senden
w3news

pr


: 10.10.2006
: 939
: Berlin


: 11.02.2010, 19:01    : str_replace nur einmal ausführen Antworten mit Zitat

Wobei da wieder das Problem mit Groß- und Kleinschreibung ist... bei str_replace habe ich einfach str_ireplace genommen und bei preg_replace? Gibt es da auch ne Möglichkeit direkt in der Funktion?

MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates
Nach oben
w3news Private Nachricht senden E-Mail senden
mgutt

pr


: 08.03.2005
: 3135



: 11.02.2010, 19:26    : str_replace nur einmal ausführen Antworten mit Zitat

Modifikator i:
http://www.php.net/manual/de/reference.pcre.pattern.modifiers.php

Also so:
Code:
$url = preg_replace('/\bTest\b/i', 'Test2', $url, 1);


Mehrere Wörter solltest Du übrigens als Array ohne extra Variable übergeben. Damit erspart man php die extra Zuweisung im Index. Hier meine Autolinksfunktion, da ich fast glaube, dass Du sowas gerade machen willst :
Code:
<?php
$text = 'Wort1 Wort2 Wort1.Wort1 Wort2 Wort2, Wort1 Wort2-Wort1 Wort1-Wort2 Wort1';
$text = ltrim(preg_replace(
   array(
      '#(?<= )(wort1)(?= )#i',
      '#\b(wort2)\b#i',
   ), array(
      '<a href="http://www.example.com/" target="_blank">\\1</a>',
      '<a href="http://www.example.org/" target="_blank">\\1</a>',
), ' ' . $text));
echo $text;
?>


In diesem Fall werden alle Wort2 verlinkt. Bei Wort1 werden nur die verlinkt, wo vorher kein Leerzeichen steht und nachher ein Leerzeichen folgt.

Den Vorteil von diesem ganzen wird man erkennen, wenn man weiß, dass \b auch den Bindestrich als Worttrenner akzeptiert und das zu unschönen Ergebnissen führt. Die Erklärung zu \b (word boundary) ist auch etwas wage:
:
A word boundary is a position in the subject string where the current character and the previous character do not both match \w or \W (i.e. one matches \w and the other matches \W), or the start or end of the string if the first or last character matches \w, respectively.


Ich habe ehrlich gesagt noch nie getestet welche Zeichen alle damit abgedeckt werden.

Dem text habe ich bei der Übergabe ein Leerzeichen angefügt, damit die Regeln bereits beim ersten Wort greifen. Das ganze wird dann mit ltrim() direkt wieder entfernt. Allerdings sieht man in meinem Beispiel, dass das letzte wort1 nicht verlinkt wird. Man müsste also nachher auch ein Leerzeichen übergeben und mit trim() arbeiten, wenn man auch das letzte Wort berücksichtigen möchte.

Hier das Gesamtergebnis:
:
Wort1 Wort2 Wort1.Wort1 Wort2 Wort2, Wort1 Wort2-Wort1 Wort1-Wort2 Wort1


Natürlich sollte man den Delimiter hier wieder auf 1 setzen. Ist nur zum Verständnis jetzt weggelassen worden.

» Adsense & Vibrant Alternative
» Ankauf von Communities und Forendomains


Zuletzt bearbeitet von mgutt am 11.02.2010, 19:46, insgesamt 4-mal bearbeitet
Nach oben
mgutt Private Nachricht senden
w3news

pr


: 10.10.2006
: 939
: Berlin


: 11.02.2010, 19:41    : str_replace nur einmal ausführen Antworten mit Zitat

So, dass mit der Groß/Kleinschreibung habe ich hinbekommen:

Code:
$suchmuster="#\bTest\b#i";
$url=preg_replace($suchmuster, $ersetzung, $url, 1);


MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates
Nach oben
w3news Private Nachricht senden E-Mail senden
w3news

pr


: 10.10.2006
: 939
: Berlin


: 05.03.2010, 20:01    : str_replace nur einmal ausführen Antworten mit Zitat

mgutt hat Folgendes geschrieben:
Hier meine Autolinksfunktion, da ich fast glaube, dass Du sowas gerade machen willst

Ne, wie kommste denn darauf... *erwischt*

Gut, aber eine andere Frage: Wie kann ich verhindern, dass nun die img- Tags zerstört werden, so bald da auch ein Key vorkommt?

MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates
Nach oben
w3news Private Nachricht senden E-Mail senden
Neues Thema eröffnen   Neue Antwort erstellen    ABAKUS Foren-Übersicht -> Webprogrammierung, Templatedesign & Microformats
Seite 2 von 3
Gehe zu Seite Zurück  1, 2, 3  Weiter

 






Ähnliche Beiträge
Thema Forum Antworten
Places Eintrag doppelt aber nur einmal im Dashboard Places Eintrag doppelt aber nur einma... ezekiel Universal Search 4 12.12.2011, 13:03 Places Eintrag doppelt aber nur einmal im Dashboard
Backlinktest einmal mit www und einmal ohne! Backlinktest einmal mit www und einma... Joy81 Google Forum 3 12.11.2011, 17:41 Backlinktest einmal mit www und einmal ohne!
Onlineshop: Kategorien noch einmal im Footer verlinken Onlineshop: Kategorien noch einmal im... InsOp Ich hab' da mal 'ne Frage 23 01.07.2011, 17:58 Onlineshop: Kategorien noch einmal im Footer verlinken
[B]Auch wenn´s einmal schnell gehen muss, ich bin für Sie da [B]Auch wenn´s einmal schnell gehen m... Finance&Forex Marktplatz: Dienstleistungen 0 17.05.2011, 11:27 [B]Auch wenn´s einmal schnell gehen muss, ich bin für Sie da
Von Anfang an auf Seite 16 jetzt auf einmal weg Von Anfang an auf Seite 16 jetzt auf ... junak Google Forum 5 29.03.2011, 10:14 Von Anfang an auf Seite 16 jetzt auf einmal weg
internetmarketing einmal anders internetmarketing einmal anders mano_negra Offtopic, Spaßecke und alle sonstigen Themen 5 26.03.2011, 00:05 internetmarketing einmal anders
Und wieder einmal .httaccess Und wieder einmal .httaccess devolo01 Webprogrammierung, Templatedesign & Microformats 1 10.12.2010, 15:49 Und wieder einmal .httaccess

Suchmaschinenoptimierung | Latent Semantische Optimierung (LSO) | SEO Blog | SEO Online Tools | Suchmaschinenmarketing Angebot | Online Marketing

Impressum

Dieses SEO Forum läuft unter phpBB.


Sie lesen gerade: str_replace nur einmal ausführen - Seite 2