Frage

Ich schreibe einige PHP BBcode zu HTML konvertieren.

Ich möchte diese BBcode konvertieren:

[quote]
Hello World
[/quote]

auf die folgenden:

<blockquote>Hello World</blockquote>

Die preg_replace-Funktion, die ich verwende diese auszuführen ist:

preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);

Dieser fast tut alles was ich brauche es, aber mein Problem ist, dass es trägt durch die \ n die aus der Zeit vor und nach dem Wort ‚Hallo Welt‘, und produziert:

<blockquote>
Hello World
</blockquote>

Irgendwelche Ideen, wie ich dieses Problem beheben könnte? Jede Hilfe sehr geschätzt.

War es hilfreich?

Lösung

Versuchen Sie, diesen regulären Ausdruck:

/\[quote\]\s*(.+?)\s*\[\/quote\]/s

Andere Tipps

Sie müssen Schrägstriche innerhalb von doppelten Anführungszeichen entkommen. Statt "\ [", müssen Sie "\\ [".

Eine Möglichkeit wäre die Verwendung der 'e' regex-Modifikator , zu benennen, zum Beispiel der trim Funktion auf der Saite.

Zitiert die Seite des Handbuchs:

  

e (PREG_REPLACE_EVAL)
Wenn dieser Modifikator gesetzt ist, preg_replace()   normale Ersetzung von   Rückreferenzierungen im Ersatz   string, wertet sie als PHP-Code und   das Ergebnis verwendet zum Ersetzen der   Suchbegriff. Apostrophe, Doppel   Zitate, Schrägstriche (\) und NULL   Zeichen werden durch Schrägstriche entwertet werden   in der ersetzten Rück.

     

Nur preg_replace() verwendet diese   Modifikator; es wird von anderen PCRE ignoriert   Funktionen.


Zum Beispiel dieser Code nur geringfügig von Ihnen:

$bbCode = <<<STR
[quote]
Hello World
[/quote]
STR;

$output = preg_replace("/\[quote\](.+?)\[\/quote\]/es", "'<blockquote>' . trim('\\1') . '</blockquote>'", $bbCode);
var_dump($output);

Würde geben Sie:

string '<blockquote>Hello World</blockquote>' (length=36)

dh die trim Funktion aufgerufen wird, was abgestimmt wurde - beachten Sie, es werden alle weißen Räume entfernen am Anfang und Ende der Zeichenfolge; nicht nur neue Zeilen, sondern auch Räume und Tabulatoren.

(Zum Beispiel können Sie einen Blick auf Beispiel # 4 auf der nehmen -Seite der preg_replace )
(Es ist vielleicht ein bisschen übertrieben in diesem Fall sollte ich hinzufügen - aber es ist schön zu wissen, sowieso)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top