BBCode to XHTML : 두 가지 가능성, 한 번의 레지스?
문제
작은 블로그 모듈을 작성하고 있습니다. 사용자가 BBCode를 입력 할 수 있기를 원합니다. DB에 저장하려면 XHTML로 변환해야합니다. [url]
.
내가 허용하고 싶은 두 가지 사례가 있습니다.
[url=http://stackoverflow.com/]
변환해야합니다
<a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a>
그리고
[url=http://stackoverflow.com/]StackOverflow[/url]
변환해야합니다
<a href="http://www.stackoverflow.com" title="StackOverflow">StackOverflow</a>
슬프게도, 나는 그렇게 할 수 없었습니다. 끔찍한 결과, 그리고 이것이 한 번의 동선에서 수행 할 수 있는지 또는 2로 나눌 수 있는지 궁금합니다.
해결책
이것은 작동해야합니다 :
\[url\s*=\s*([^\]]*)]\s*((?:(?!\s*\[/url\]).)*)\s*\[/url\]|\[url\s*=\s*([^\]]*)]
교체 패턴 :
<a href="$1$3" title="$2">$2$3</a>
이 입력으로 테스트 :
bla [url=http://stackoverflow.com/]StackOverflow[/url] bla
bla [url=http://stackoverflow.com/] bla
보고:
bla <a href="http://stackoverflow.com/" title="StackOverflow">StackOverflow</a> bla
bla <a href="http://stackoverflow.com/" title="">http://stackoverflow.com/</a> bla
어쨌든 유효하지 않은 XML 문자 ( ", <,> 등)가 태그 내용을"break "할 수 있으므로 유효성 검사/탈출을 추가해야 할 수도 있습니다.
다른 팁
이 작품과 같은 일이 그렇게해야합니다.
\[url=([^\]]+)\](?:([^\[]+)\[\/url\])?
일치하면 URL을 $ 1에, 텍스트가 지정된 경우 2 달러로 배치해야합니다. 나는 이것을 아직 테스트하지 않았으므로 약간의 조정이 필요할 수 있습니다.
항문 기능 bbcode2html ($ text)
https://code.google.com/p/pwision/source/browse/trunk/inc/bbcode.inc#150
BBCode 2 HTML을 변환하는 알고리즘은 다음과 같습니다. 1) BBCode 텍스트 코드를 여기에서 조절합니다.https://code.google.com/p/pwision/source/browse/trunk/inc/bbcode.inc#60
2) 규제 된 BBCode를 XML 코드로 변환하십시오.https://code.google.com/p/pwision/source/browse/trunk/inc/bbcode.inc#101
3) XSLT 변환을 XML 텍스트로 실행하십시오. XSLT 파일은 여기에 있습니다https://code.google.com/p/pwision/source/browse/trunk/inc/bbcodexml2html.xslt변환은 여기에서 수행됩니다.https://code.google.com/p/pwision/source/browse/trunk/inc/bbcode.inc#113
내가 도와주기를 바랍니다!
추신 : 여기에서 찾을 수있는 좋은 XSLT 튜토리얼 :http://www.w3schools.com/xsl/xsl_languages.asp