Domanda

Sto scrivendo un po 'di PHP per convertire BBcode in HTML.

Vorrei convertire questo BBcode:

[quote]
Hello World
[/quote]

per il seguente:

<blockquote>Hello World</blockquote>

La funzione preg_replace che sto usando per eseguire questa è:

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

Questo fa quasi tutto ho bisogno di, ma il mio problema è che essa porta attraverso la \ n del prima e dopo 'Ciao Mondo', e produce:

<blockquote>
Hello World
</blockquote>

Tutte le idee come potrei risolvere questo problema? Tutto l'aiuto molto apprezzato.

È stato utile?

Soluzione

Prova questa espressione regolare:

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

Altri suggerimenti

Hai bisogno di fuggire backslash all'interno di virgolette. Invece di "\ [", è necessario "\\ [".

Una possibilità sarebbe quella di utilizzare il 'e' regex modificatore , chiamare, per esempio, la funzione trim sulla stringa.

Citando la pagina del manuale:

  

e (PREG_REPLACE_EVAL)
Se questo modificatore è impostato, preg_replace()   fa normale sostituzione   backreference in sostituzione   stringa, valuta come codice PHP, e   usa il risultato per la sostituzione   stringa di ricerca. virgolette singole, doppie   citazioni, backslash (\) e NULL   caratteri saranno sfuggiti da backslash   in backreference sostituiti.

     

Solo preg_replace() utilizza questa   modificatore; viene ignorato da altri PCRE   funzioni.


Per esempio, questo codice, solo leggermente diversa dalla tua:

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

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

darebbe:

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

vale a dire, la funzione trim viene chiamato su ciò che è stato abbinato - notare che rimuoverà tutti i bianchi-spazi all'inizio e alla fine della stringa; non solo a capo, ma anche spazi e tabulazioni.

(Per esempio, si può dare un'occhiata a Esempio # 4 sul pagina di manuale di preg_replace )
(E 'forse un po' eccessivo, in questo caso, dovrei aggiungere - ma è bello sapere che in ogni caso)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top