![]() |
[php] Mehrere Strings ersetzen schlägt fehl
Hallo,
Ich habe hier ein für mich unverständliches Problem mit php: Ich habe eine Variable $line in der z.B. folgendes steht:
Code:
nun möchte ich alle url-Tags durch entsprechende HTML-Tags ersetzen.
Ob [url=index.php?id=1]1[/url], [url=index.php?id=2]2[/url], [url=index.php?id=3]3[/url]
Zuerst also mit einem nur:
PHP-Quellcode:
Super! Es funktioniert, aber jetzt kommt es:
$p=strpos($line,"[url=");
if (($p<>null) or (substr($line,0,5)=="[url=")) { $s=substr($line,$p+5,strpos($line,']')-$p-5); $line=str_replace("[url=".$s."]", "<a href=\"".$s."\">", $line); } Man sollte ja annehmen das wenn ich das ganze 2x hintereinander schreibe:
PHP-Quellcode:
Der das auch mit dem 2. macht, ist aber nicht so!
$p=strpos($line,"[url=");
if (($p<>null) or (substr($line,0,5)=="[url=")) { $s=substr($line,$p+5,strpos($line,']')-$p-5); $line=str_replace("[url=".$s."]", "<a href=\"".$s."\">", $line); } $p=strpos($line,"[url="); if (($p<>null) or (substr($line,0,5)=="[url=")) { $s=substr($line,$p+5,strpos($line,']')-$p-5); $line=str_replace("[url=".$s."]", "<a href=\"".$s."\">", $line); } Wobei ich doch aber den 1. Tag ersetzt habe wodurch dieser nicht mehr da sein sollte → es wird der nächste gefunden. da frage ich mich: warum macht der nicht das was man erwartet? Und: wie kann ich beliebig viele davon ersetzen? |
AW: [php] Mehrere Strings ersetzen schlägt fehl
Ohne, dass ich mir jetzt dein Skript genauer angeschaut habe:
Normalerweise eignen sich für sowas wunderbar sog. "Regular Expressions". Ein Beispiel:
Code:
mfg
$text = preg_replace("/\[url=(.*)\](.*)\[\/url\]/Usi", "<a href=\"\\2\">\\3</a>", $text);
Patrick |
AW: [php] Mehrere Strings ersetzen schlägt fehl
Du kannst doch in PHP auch
![]() Schreib Dir eine Funktion, dass eine Ersetzung ausführt. Und vergiss nicht einen schönen, ausführlichen Kommentar vor die Funktion zu schreiben. Ohne Kommentar wirst du deinen eigenen Code in 2 Monaten nicht mehr verstehen! |
AW: [php] Mehrere Strings ersetzen schlägt fehl
Zitat:
PHP-Quellcode:
Jedoch wird jetzt aus
$line= preg_replace("/\[url=(.*)\]/Usi", "<a href=\"\\2\">", $line);
Code:
ein
[url=index.php?id=2]
HTML-Code:
und zwar bei allen vorkommenden url-Tags.
<a href="index.php">
Was ist da noch falsch? |
AW: [php] Mehrere Strings ersetzen schlägt fehl
Zitat:
|
AW: [php] Mehrere Strings ersetzen schlägt fehl
OK, ich habe jetzt herausgefunden dass das ? eine besondere Rolle bei regex einnimmt, Jedoch stellen sich mir 2 Fragen:
Wie bekomme ich das hin dass der das ? als normales Zeichen wertet? Und es muss ja nicht einmal unbedingt ein ? im Link vorkommen, wie behandelt man dass dann? Edit: Das funktioniert jetzt:
PHP-Quellcode:
//für asd?dsa
$line= preg_replace("/\[url=(.*)\?(.*)\]/U", "<a href=\"\\1?\\2\">", $line); //für asd $line= preg_replace("/\[url=(.*)\]/U", "<a href=\"\\1\">", $line); |
AW: [php] Mehrere Strings ersetzen schlägt fehl
Zitat:
Zitat:
* bedeutet, der Ausdruck ist optional |
AW: [php] Mehrere Strings ersetzen schlägt fehl
Man könnte auch die Zeichenklasse erweitern wenn das ? nicht enthalten ist:
Code:
Was der . schon alles abdeckt habe ich leider grad nicht im Kopf, aber so ungefähr sollte es gehen ;)
$line= preg_replace("/\[url=([._\-\?\+#]*)\]/Usi", "<a href=\"\\2\">", $line);
|
AW: [php] Mehrere Strings ersetzen schlägt fehl
Du willst doch einfachen BBCode parsen, oder? - Dafür gibt es bereits fertige Klassen, die das für dich erledigen. Ich verwende eine, bei der du gleich schon den Parameter extrahiert bekommst und gleichzeitig auf den Inhalt zwischen Start-Tag und End-Tag zugreifen kannst. So hast du wenigstens nicht das Problem, dass in deinem BBCode falsch verschachtelt wird.
Momentan prüfst du nur auf das Start-Tag. Das Endtag wird bei dir nicht beachtet, was eigentlich nicht richtig ist. Bernhard PS: Ich benutze diese Klasse: ![]() |
AW: [php] Mehrere Strings ersetzen schlägt fehl
Na, wenn's darum geht. Ich nutze
![]() Beispiele zur Verwendung gibt's ![]() Ich testete auch die Klasse von Christian Seiler, doch es gab da irgendetwas, das mich gewaltig störte bzw. damit nicht möglich war. Frag mich aber bitte nicht mehr was. |
AW: [php] Mehrere Strings ersetzen schlägt fehl
Ja, an sich möchte ich BBCodes parsen, aber in sehr abgespeckter version, deswegen reicht mir das.
|
AW: [php] Mehrere Strings ersetzen schlägt fehl
Zitat:
Liebe Grüße, Valentin |
AW: [php] Mehrere Strings ersetzen schlägt fehl
Nachdem ich mich dann mal durch gerungen hatte mir das an zulesen fand ich das auch sehr toll.
Das ist eine sehr schöne und mächtige Funktion :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz