2016-12-18 2 views
0

일부 markdown을 포함하는 텍스트 영역이 있습니다. 나는 내가이 인하 코드 블록 외부의 모든 HTML을 허용하지 않으려는마크 업 코드 블록 외부 HTML에 대한 정규식

``` someLanguageCode 
<span>some html inside markdown code block</span> 
``` 

같은 가격 인하 코드 블록 내부가 아닌 사용자가, 거기에 HTML을 게시하지 않습니다. 그래서 이것은 불법입니다 :

<span>some html tag outside code block</span> 
<div>some more multiline html code outside 
</div> 
``` someLanguageCode 
<span>some html inside markdown code block</span> 
``` 

한 줄 html 태그에 대한 정규식을 얻을 수있었습니다. <([a-zA-Z][a-zA-Z0-9]*)\b[^>]*>(.*?)<\/\1>

는 그 HTML 외부 인하 코드 블록 여부를 확인하기 위해 멀티 라인 html 태그 및

  • 을 지원하는 정규식을 얻을

    1. 을 드릴 수 없습니다.

    나는이 문제를 해결하기 위해 jsfiddle을 만들었습니다.이 문제는 무엇이 일치해야하는지 또는 거부되어야 하는지를 보여줍니다.

    명백한 XSS 주사를 피하려고 시도하고 있습니다.

  • +0

    http://stackoverflow.com/a/1732454/ 당신은 '수 [X] HTML을 정규식으로 파싱합니다. –

    답변

    2

    주석에서 이미 언급 했으므로 전체 HTML을 정규식으로 구문 분석하지 마십시오. 나는 단지 태그를 제거하고 유효하지 않은 것으로 표시하려고한다고 생각합니다. 나는 외부 인하 영역 또는에 코드를 적용하는 구조를 분석하고 당신에게 가능성을 제공합니다 몇 가지 코드를 넣어 jsfiddle을 만들어 :

    var valid = '``` someLanguageCode'+ 
    '<span>some html inside markdown code block</span>'+ 
    '```'; // Valid string 
    var broken = '``` someLanguageCode'+ 
    '<span>some html inside markdown code block</span>'; //Markdown not closed (broken string) 
    var not_valid = '<span>Me is outside.</span>'+ 
    '``` someLanguageCode'+ 
    '<span>some html inside markdown code block</span>'+ 
    '```'; // Not valid string 
    
    var s = not_valid; //Change this to test 
    
    document.getElementById('code').innerHTML = check_html_in_markdown(s); 
    
    function check_html_in_markdown(s){ 
        s = s.split(/```/); 
        //Check if markdown blocks are closed correctly 
        var is_broken = false; 
        if(s.length % 2 == 0){ //odd number of markdown ``` means not closed 
        is_broken = true; 
        alert('Markown is broken'); 
        } 
    
        if(!is_broken){ 
        var in_markdown = false; 
        for(var i in s){ 
         in_markdown = i % 2 == 1; 
         if(!in_markdown){ 
         //Code to find HTML-Tags and replace them 
         s[i] = s[i].replace(/<[a-z\/][^>]*>/g, ' **Your replacement** '); 
         } else { 
         //Here you can do nothing or check with a HTML-Parser if there is valied HTML 
         } 
        } 
        } 
        return s.join('```'); 
    } 
    
    +0

    감사합니다. 나는 내 [jsfiddle] (https://jsfiddle.net/cgxonw1x/12/)에서 시험해 보았고 테스트를 통과했다. –