Domanda

Sto scrivendo un piccolo modulo blog. Voglio che gli utenti siano in grado di digitare BBCode. Devo convertirlo in XHTML per archiviarlo nel DB, cosa che sono riuscito a fare per la maggior parte dei tag, ad eccezione di [url].

Ci sono due casi che voglio consentire:

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

che dovrebbe essere convertito in

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

e

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

che dovrebbe essere convertito in

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

Purtroppo, non sono stato in grado di farlo. I risultati sono stati orribili e mi chiedo se ciò possa essere fatto in un'unica regex o se debba essere diviso in due.

È stato utile?

Soluzione

Questo dovrebbe funzionare:

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

Schema di sostituzione:

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

Testato con questo input:

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

Returns:

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

Si noti che in ogni caso potrebbe essere necessario aggiungere un po 'di convalida / escape, poiché i caratteri XML non validi (" ;, < ;, > ecc.) possono " break " il contenuto del tag.

Altri suggerimenti

Qualcosa come questo lavoro orribile dovrebbe farlo:

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

Al momento della corrispondenza, questo dovrebbe inserire l'URL in $ 1 e il testo in $ 2 se è stato specificato. Non l'ho ancora testato, quindi potrebbe richiedere qualche modifica.

Analizza la funzione BBCode2HTML ($ text)

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

L'algoritmo per trasformare l'HTML di BBCode 2 è: 1) regola il testo del BBCode codice qui: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#60

2) trasforma il BBCode regolamentato in XML codice qui: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#101

3) esegui una trasformazione XSLT nel testo XML. Il file XSLT è qui https://code.google.com/p/pwision /source/browse/trunk/inc/BBCodeXML2HTML.xslt La trasformazione viene eseguita qui: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#113

Spero di averti aiutato!

PS: un buon tutorial XSLT che puoi trovare qui: http://www.w3schools.com/xsl/xsl_languages.asp

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