Pergunta

Eu estou escrevendo um pequeno módulo blog. Eu quero que os usuários sejam capazes de digitar BBCode. Eu preciso converter isso para XHTML para loja no DB, que eu consegui fazer para a maioria das marcas, exceto para [url].

Existem dois casos eu quero permitir que:

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

que deve ser convertido para

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

e

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

que deve ser convertido para

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

Infelizmente, eu fui incapaz de fazer isso. Os resultados foram horrível, e eu estou querendo saber se isso poderia ser feito em um regex ou se ele tem que ser dividido em dois.

Foi útil?

Solução

Isso deve funcionar:

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

padrão de substituição:

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

Testado com esta entrada:

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

Retorna:

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

Note que, em qualquer caso, você pode ter que adicionar alguma validação / escapar, como caracteres inválidos XML (", <,> etc.) pode "quebrar" o conteúdo da tag.

Outras dicas

Algo como este pedaço medonho de trabalho deve fazê-lo:

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

Ao correspondência, este deve colocar o URL em US $ 1 e o texto em $ 2 se tiver sido especificado. Eu não testei isso ainda por isso poderia exigir alguns ajustes.

analisar função BBCode2HTML ($ text)

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

O algoritmo para transformar BBCode 2 HTML é: 1) regular o texto BBCode código aqui: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#60

2) transformar o BBCode regulado para XML código aqui: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#101

3) executar uma transformação XSLT ao texto XML. O arquivo XSLT é aqui https://code.google.com/p/pwision /source/browse/trunk/inc/BBCodeXML2HTML.xslt A transformação é feita aqui: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#113

A esperança eu ajudei!

PS: um bom XSLT tutorial, você pode encontrar aqui: http://www.w3schools.com/xsl/xsl_languages.asp

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