Pregunta

Estoy escribiendo algo de PHP para convertir Bbcode a HTML.

Me gustaría convertir este BBcode:

[quote]
Hello World
[/quote]

a lo siguiente:

<blockquote>Hello World</blockquote>

La función preg_replace que estoy usando para llevar a cabo esto es:

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

Esto casi hace todo lo que necesito, pero mi problema es que lleva a través del \ n de antes y después de 'Hello World', y produce:

<blockquote>
Hello World
</blockquote>

¿Alguna idea de cómo podría solucionar este problema? Todo tipo de ayuda muy apreciada.

¿Fue útil?

Solución

Probar expresión regular:

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

Otros consejos

Es necesario escapar las barras invertidas dentro de las comillas dobles. En lugar de, es necesario "\\ [". "\ ["

Una posibilidad sería utilizar el 'e' regex-modificador , para llamar, por ejemplo, la función trim en la cadena.

Citando la página del manual:

  

e (PREG_REPLACE_EVAL)
Si se aplica este modificador, preg_replace()   hace la sustitución normal de   referencias hacia atrás en la sustitución   cadena, lo evalúa como código PHP, y   utiliza el resultado para la sustitución de la   cadena de búsqueda. Las comillas simples, dobles   citas, barras invertidas (\) y NULL   caracteres se escaparon por barras invertidas   en backreferences sustituidos.

     

Sólo preg_replace() utiliza esta   modificador; que es ignorado por otra PCRE   funciones.


Por ejemplo, este código, sólo ligeramente diferente a la suya:

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

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

¿Quieres que dar:

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

es decir, la función trim se denomina en lo que estaba emparejado - señalar que se eliminarán todos los espacios en blanco al principio y al final de la cadena; no sólo nuevas líneas, sino también espacios y tabulaciones.

(Por ejemplo, se puede echar un vistazo a Ejemplo # 4 en el página del manual de preg_replace )
(Es tal vez un poco exagerado en este caso, debo añadir - pero es bueno saber de todos modos)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top