2010-04-25 7 views
0

html 텍스트를 bbcodes으로 변환해야합니다. 어떻게해야할까요? 예를 들어, 내가 링크 변환 : 내가 bbcodes에있는 모든 html 태그로 변환 (및 BB 코드하지 않은 비워 대체 할 수있는 방법어떻게 html을 BBcode로 변환합니까?

regex = new Regex("<a href=\"(.+?)\">(.+?)</a>"); 
htmlCode = regex.Replace(htmlCode, "[URL]$1[/URL]"); 

, 태그 P

+5

[당신은 정규 표현식을 사용하여 HTML을 구문 분석 할 수 없습니다!] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-입니다 포함 된 태그) – SLaks

+0

나는이 게시물을 읽었습니다, 알아요. 그러나. 사용자 입력이 있습니다. 사용자는 보통 형식으로 programm html에 입력합니다. 나는 사용자 입력 형식을 만든다. 나는 당신이 나를 이해하기를 바랍니다. =) – Dmitriy

+0

당신은 여전히 ​​DOM 조작 라이브러리를 사용하여 사용자 입력을 처리 할 수 ​​있습니다. 그리고 HTML에서 BBCode로 무손실로 변환하는 것은 불가능합니다. 왜냐하면 후자는 전자가하는 모든 것을 지원하지 않기 때문입니다. –

답변

2

일부 HTML 태그의 경우 간단하게 string.Replace을 사용할 수 있습니다. BBCode는 여러 가지면에서 단지 1 : 1, tag-for-tag 매핑인데, 예를 들어 <b></b>은 각각 [B][/B]으로 매핑됩니다. 정말 죽은 - 간단한 HTML의 경우

html.Replace("<b>", "[b]").Replace("</b>", "[/b]") 

, 당신은이 태그별로 태그를하는 성능에 미치는 영향 및 코드 추함 마음을 그것을하지 않습니다 그래서 그냥 쉽게 달성입니다. 결과로 나오는 BBCode를 웹 페이지에 어딘가에 표시하려는 경우 크로스 사이트 스크립팅 취약점에주의하십시오. 이것은 위생 ​​처리를 위해 충분히 가까이 있지 않습니다.

그러나 정규식을 사용하여 HTML을 삭제하고 모든 태그를 자동으로 대체하는 데 신경 쓰지 마십시오. 예를 들어 <img> 태그는 HTML과 BBCode가 완전히 다릅니다. HTML에서는 <img src="..."/> (후행 슬래시는 선택 사항)이고 BBCode에서는 [IMG]...[/IMG]입니다. 정규식으로 이것을하는 것은 ... 글쎄, 그냥 차선 이하라고 말하자.

정규 표현식은 일반 언어 용으로 설계되었으며 HTML은 일반 언어가 아니며 문맥 자유형 언어입니다. 실제로는 HTML Agility Pack과 같은 HTML 파서를 사용하는 것이 좋습니다. 그런 다음 DOM 트리를 내리고 원하는 요소를 허용 목록에 추가하고 원하는대로 BBCode 또는 다른 것으로 매핑 할 수 있습니다.

2

보다는 사용 정규식 등에서 특정 요소를 뽑아 오기를 (이 은 HTML을 구문 분석 할 수 없습니다.) HtmlAgilityPack을 사용하여 DOM 트리를 검색하고 관련 HTML 태그를 BBCode로 변경하십시오. 새로운 이 유효합니다. BBCode 문서가 가장 어려울 것 같습니다. 유효한 BBCode 마크 업을 어딘가에 만들 수 있습니까?

+0

oh ,, no)) 나는 분명히 xhtml을 가지고있다. 몇몇 태그 : p, b, u, i, span, br, strong, h1-h6 ... thats all ..) – Dmitriy

+0

"clear xhtml"은 무엇을 의미합니까? '

+0

i have clear link: only name와 같은 요소에 대해서는 여전히 파서를 사용해야한다. 다른 사람은 내가 잃어 버릴 수있다 – Dmitriy

0

DOM을 파싱하기 위해 만들어진 도구 인 HtmlAgilityPack을 사용한다고 가정했는데 .net에 내장 된 도구를 사용할 수 있고 외부 DLL을 참조하지 않아도되는 도구가 필요했습니다.

그래서 저는 C#에서 RegEx를 통해 변환기를 작성했습니다. 여기

내 쓰기까지 http://www.foliotek.com/devblog/convert-html-to-bbcode-in-c/

관련 문제