Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

preg_replace limit will nicht

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
marc77
PostRank 8
PostRank 8
Beiträge: 849
Registriert: 22.05.2007, 21:41

Beitrag von marc77 » 03.04.2010, 20:00

Hallo,

ich möchte das jedes Wort das er findet nur einmal mit einem link ersetzt wird und nicht jedes mal.

Den Limit Parameter hab ich gesetzt aber er hält sich einfach nicht dran. evtl. liegt es am if (count($crosslink_word)) ??? Weil $crosslink_word ist ein array:

$crosslink_word = array();

hier der code:

Code: Alles auswählen

if (count($crosslink_word)) {
$message=preg_replace($crosslink_word, $crosslink_url, $message, 1);
}
danke!

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

Hasenhuf
PostRank 9
PostRank 9
Beiträge: 2840
Registriert: 26.12.2005, 22:22

Beitrag von Hasenhuf » 04.04.2010, 13:39

marc77 hat geschrieben:ich möchte das jedes Wort das er findet nur einmal mit einem link ersetzt wird und nicht jedes mal.
Das heißt was genau?
marc77 hat geschrieben:Den Limit Parameter hab ich gesetzt aber er hält sich einfach nicht dran.
Das heißt was genau?

Laß mich raten, die Worte z.B. Hausbot und Haus sollen verlinkt werden und nachdem er Hausbot verlinkt hat, wird in dem Link Haus nochmal verlinkt?
marc77 hat geschrieben:evtl. liegt es am if (count($crosslink_word)) ??? Weil $crosslink_word ist ein array:
if (irgendwas) ist wahr oder falsch und was in dessen Abhänigkeit ein mal ausgeführt wird ist davon unabhängig.

w3news
PostRank 8
PostRank 8
Beiträge: 938
Registriert: 10.10.2006, 23:17
Wohnort: Berlin

Beitrag von w3news » 05.04.2010, 12:34

MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


marc77
PostRank 8
PostRank 8
Beiträge: 849
Registriert: 22.05.2007, 21:41

Beitrag von marc77 » 05.04.2010, 16:25

Hi,

danke, das hatte ich bereits gelesen. ich hab mein problem nun auch fast gelöst. Es lag in der Tat am IF, da das preg match ungeachtet vom limit natürlich so oft ausgeführt wurde, wie das If ein Wort gefunden hat.

Mein code sieht jetzt so aus:


$string = bla bla bla foo foo bla bla

$search[] = '/\b('.'foo'.')\b/i';

echo preg_replace($search, $replace, $string, 1);

Es funktioniert alles nur habe ich das Problem wenn im Text irgendwo ein Bild ist und das Bild hat ein alt tag und in diesem alt tag steht z.b. alt="foo" dann wird dies auch ersetzt und dadurch entsteht natürlich ein html fehler weil:

<a href=""><img src="" alt="<a href="">foo</a>"></a> .....

Wie muss ich denn die regex so ändern, dass er "foo" im alt tag oder title tag nicht beachtet?

'/\b('.'foo'.')\b/i'; ???

Danke

w3news
PostRank 8
PostRank 8
Beiträge: 938
Registriert: 10.10.2006, 23:17
Wohnort: Berlin

Beitrag von w3news » 05.04.2010, 16:30

Wurde auch in dem Thread beantwortet den ich gepostet hatte. ;)
Platzhalter für den img- Tag und danach dann wieder einfügen.
MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates

marc77
PostRank 8
PostRank 8
Beiträge: 849
Registriert: 22.05.2007, 21:41

Beitrag von marc77 » 05.04.2010, 19:00

Hi,

danke :)

im letzten Satz deines Topics steht ja:

Am besten ist denke ich alle Leerzeichen zwischen <img und dem ersten > gegen einen Platzhalter (z.B. @@) zu tauschen, dann Autolinks setzen und zuletzt die Platzhalter wieder gegen Leerzeichen ersetzen.

Wie sieht sowas praktisch aus. Magst mir mal deinen fertigen code zeigen? danke

w3news
PostRank 8
PostRank 8
Beiträge: 938
Registriert: 10.10.2006, 23:17
Wohnort: Berlin

Beitrag von w3news » 05.04.2010, 19:11

Ich hab es selber (noch) nicht eingebaut, aber ich würde es ungefähr so machen:

Vor dem Ersten preg_replace einfach den Orginaltext mit str_replace die Leerzeichen durch @ ersetzen:

Code: Alles auswählen

str_replace = &#40;' ','@','$text'&#41;;
Und nach dem preg_replace halt wieder umwandeln:

Code: Alles auswählen

str_replace = &#40;'@',' ','$text'&#41;;
MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates

marc77
PostRank 8
PostRank 8
Beiträge: 849
Registriert: 22.05.2007, 21:41

Beitrag von marc77 » 06.04.2010, 09:46

sorry aber irgendwie verstehe ich das immernoch nicht..was hat das für einen sinn?

angenommen es wird das wort "test" ersetzt und im string gibt es

<a href="tld.de" title="super, dass ist ein Test und...">Test</a>

oder

<img src="1.jpg" alt="super, dass ist ein Test und...">

dann würde doch das Test innerhalb von alt und title trotzdem ersetzt oder?

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 06.04.2010, 09:54

dann würde doch das Test innerhalb von alt und title trotzdem ersetzt oder?
JA

Soll die Linkbezeichnung "Test" in dem Fall eigentlich ersetzt werden oder nicht? Eher nicht, oder? Wäre dann ja ein Link in einem Link

marc77
PostRank 8
PostRank 8
Beiträge: 849
Registriert: 22.05.2007, 21:41

Beitrag von marc77 » 06.04.2010, 10:07

Richtig, innerhalb von alt und title Tags soll natürlich nix ersetzt werden, da ja dann ein link in einem link und dann gibts nen fehler oder das Bild wird nicht dargestellt.

Man kann das wohl mit regexp lösen, ich habe einen code gefunden:

Code: Alles auswählen

$message = str_replace&#40;'\"', '"', substr&#40;preg_replace&#40;'#&#40;\µ&#40;&#40;&#40;?>&#40;&#91;^µ§&#93;+|&#40;?R&#41;&#41;&#41;*&#41;\§&#41;&#41;#se', "preg_replace&#40;\$crosslink_word, \$crosslink_url, '\\0', 1&#41;", 'µ' . $message . '§'&#41;, 1, -1&#41;&#41;;
das array sieht so aus:

Code: Alles auswählen

$crosslink_word&#91;&#93; = '#\b&#40;'.&#123;cache_row.ID&#125;.'&#41;\s#';
$crosslink_url&#91;&#93; = '<a href="lexicon.'.$phpEx.'?letter='.&#123;cache_row.ID&#125;.'" class="crosslink" title="'.&#123;cache_row.ID&#125;.' Erkl&auml;rung">'.&#123;cache_row.ID&#125;.'</a> ';
$crosslink_word&#91;&#93; = '#\s&#40;'.&#123;cache_row.ID&#125;.'&#41;\b#';
$crosslink_url&#91;&#93; = ' <a href="lexicon.'.$phpEx.'?letter='.&#123;cache_row.ID&#125;.'" class="crosslink" title="'.&#123;cache_row.ID&#125;.' Erkl&auml;rung">'.&#123;cache_row.ID&#125;.'</a>';
das wäre auch alles perfekt, wenn ich aber jetzt noch die groß kleinschreibung ersetzung mit /i einfügen will, wird nix ersetzt. Ich habe also versucht im array hinter \b# ein /i einzufügen, das geht aber nicht..wo muss ich denn das /i einfügen?

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag