Pergunta

Eu estou escrevendo alguns PHP para converter BBCode para HTML.

Eu gostaria de converter o BBcode:

[quote]
Hello World
[/quote]

com o seguinte:

<blockquote>Hello World</blockquote>

A função preg_replace que eu estou usando para executar esta é:

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

Esta quase faz tudo o que eu preciso que ele, mas o meu problema é que ele carrega através da \ n é de antes e depois 'Olá Mundo', e produz:

<blockquote>
Hello World
</blockquote>

Alguma idéia de como eu poderia corrigir isso? Toda a ajuda muito apreciado.

Foi útil?

Solução

Tente esta expressão regular:

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

Outras dicas

Você precisa escapar as barras invertidas dentro de aspas duplas. Em vez de "\ [", você precisa de "\\ [".

Uma possibilidade seria usar o 'e' regex-modificador , para chamar, por exemplo, a função trim na corda.

Citando essa página do manual:

e (PREG_REPLACE_EVAL)
Se este modificador é definido, preg_replace() faz a normal substituição de backreferences na substituição corda, avalia como código PHP, e utiliza o resultado para substituir o seqüência de pesquisa. aspas simples, dupla citações, barras invertidas (\) e NULL caracteres serão escapou por barras invertidas em backreferences.

Apenas preg_replace() usa esta modificador; ele é ignorado por outros PCRE funções.


Por exemplo, este código, apenas ligeiramente diferente da sua:

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

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

iria dar-lhe:

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

ou seja, a função trim é chamado sobre o que foi combinado - nota que irá remover todos os espaços em branco no início e no final de sua corda; não só newlines, mas também espaços e tabulações.

(Por exemplo, você pode dar uma olhada no Exemplo # 4 na página do manual de preg_replace )
(é talvez um pouco exagero neste caso, devo acrescentar - mas é bom saber de qualquer maneira)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top