문제

작은 블로그 모듈을 작성하고 있습니다. 사용자가 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top