Pregunta

Estoy escribiendo un pequeño módulo de blog. Quiero que los usuarios puedan escribir BBCode. Necesito convertir eso a XHTML para almacenarlo en la base de datos, lo que logré hacer para la mayoría de las etiquetas, excepto [url].

Hay dos casos que quiero permitir:

[url=http://stackoverflow.com/]

que debe convertirse a

<a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a>

y

[url=http://stackoverflow.com/]StackOverflow[/url]

que debe convertirse a

<a href="http://www.stackoverflow.com" title="StackOverflow">StackOverflow</a>

Lamentablemente, no he podido hacer eso. Los resultados fueron horribles, y me pregunto si esto podría hacerse en una expresión regular o si debe dividirse en dos.

¿Fue útil?

Solución

Esto debería funcionar:

\[url\s*=\s*([^\]]*)]\s*((?:(?!\s*\[/url\]).)*)\s*\[/url\]|\[url\s*=\s*([^\]]*)]

Patrón de reemplazo:

<a href="$1$3" title="$2">$2$3</a>

Probado con esta entrada:

bla [url=http://stackoverflow.com/]StackOverflow[/url] bla
bla [url=http://stackoverflow.com/] bla

Devoluciones:

bla <a href="http://stackoverflow.com/" title="StackOverflow">StackOverflow</a> bla
bla <a href="http://stackoverflow.com/" title="">http://stackoverflow.com/</a> bla

Tenga en cuenta que, en cualquier caso, es posible que deba agregar alguna validación / escape, ya que los caracteres XML no válidos (" ;, < ;, > etc.) pueden " break " el contenido de la etiqueta.

Otros consejos

Algo así como este horrible trabajo debería hacerlo:

\[url=([^\]]+)\](?:([^\[]+)\[\/url\])?

Al hacer coincidir, esto debería colocar la url en $ 1 y el texto en $ 2 si se ha especificado. Todavía no probé esto, por lo que podría requerir algunos ajustes.

Función de análisis BBCode2HTML ($ text)

https://code.google. com / p / pwision / source / browse / trunk / inc / BBCode.inc # 150

El algoritmo para transformar HTML de BBCode 2 es: 1) regular el texto de BBCode código aquí: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#60

2) transforma el código BBCode regulado a XML código aquí: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#101

3) ejecute una transformación XSLT al texto XML. El archivo XSLT está aquí. https://code.google.com/p/pwision /source/browse/trunk/inc/BBCodeXML2HTML.xslt La transformación se realiza aquí: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#113

¡Espero haber ayudado!

PD: un buen tutorial de XSLT que puedes encontrar aquí: http://www.w3schools.com/xsl/xsl_languages.asp

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