2012-01-05 5 views
1

모든 태그를 제거하는 데이 코드를 사용했지만 일부 태그를 저장하는 등의 작업을하지 않아도 ... 어떻게 할 수 있습니까? 내가 태그 JavaScript에서 허용되는 태그를 사용하는 PHP의 equivalent strip_tags

/*************************************************** 
    STRIP HTML TAGS 
    ****************************************************/ 
    function strip_tags(html){ 

     //PROCESS STRING 
     if(arguments.length < 3) { 
      html=html.replace(/<\/?(?!\!)[^>]*>/gi, ''); 
     } else { 
      var allowed = arguments[1]; 
      var specified = eval("["+arguments[2]+"]"); 
      if(allowed){ 
       var regex='</?(?!(' + specified.join('|') + '))\b[^>]*>'; 
       html=html.replace(new RegExp(regex, 'gi'), ''); 
      } else{ 
       var regex='</?(' + specified.join('|') + ')\b[^>]*>'; 
       html=html.replace(new RegExp(regex, 'gi'), ''); 
      } 
     } 

     //CHANGE NAME TO CLEAN JUST BECAUSE 
     var clean_string = html; 

     //RETURN THE CLEAN STRING 
     return clean_string; 

을 필터링 할 수있는 방법을 이해할 수 없다 ** 편집이 내가이 당신의 기능을 사용

<body class="portrait" onLoad="prepareImages()"> 
    <div id="title_wrapper"><h2 id="title"><a href="[[[LINK]]]">[[[TITLE]]]</a></h2></div> 
    <h2 id="subtitle">[[[DATE]]]</h2> 
    <div id="content"> 
     [[[FULL CONTENT]]] etc.... 
    </div> 

내 HTML 코드 * ** 입니다 * (대체해야하는 것은 : [[[전체 내용]]] 등)

결과가 없습니다. [[[FULL CONTENT]]] 등 .... [[[FULL CONTENT]]] 등으로 다시 쓰려면 어떻게해야합니까? html 태그를 제외하고는?

+0

참고로 [bad things] (https://stackoverflow.com/a/1732454/266535)가 발생하기 때문에 정규식을 사용하지 마십시오 – styfle

답변

4

Eval? 그건 정말 못생긴 코드입니다. 정규식 패턴을 사용하여 모든 태그와 일치시킵니다.

  • 함수 호출의 매개 변수가 3 개 미만이면 모든 태그가 제거됩니다. 함수 호출은 적어도 3 개 개의 매개 변수가있는 경우에는
  • :
    • 세번째 파라미터 "a", "b", "strong" 같은 문자열이다. 못생긴 evil eval 구성 덕분에 따옴표가 필요합니다.
    • 번째 파라미터가 진리 값 (예 true), 세번째 파라미터 번째 파라미터는 거짓 값 (예컨대 false) 인 경우
    • 허용 태그 목록, 세번째 파라미터 인 경우 당신이 적절한 strip_tags 기능이 필요하면

을 거부 태그 목록은 http://phpjs.org/functions/strip_tags:535

+0

+1 for php.js :-) –

+0

내 질문 편집! –

+0

@UsiUsi PHP와 그 [strip_tags] (http://php.net/strip-tags) 기능에 익숙하다고 가정했습니다. 당신은 정확히 무엇을 성취하고 싶습니까? 텍스트의 일부를 바꾸기 * 또는 * 페이지 내용 바꾸기? – Lekensteyn

0

에서 보면 (phpjs.org에서) 허용 태그) (여기 strip_tags을의 한이다 .

// allow can be a string like '<b><i>' 
function strip_tags(str, allow) { 
    // making sure the allow arg is a string containing only tags in lowercase (<a><b><c>) 
    allow = (((allow || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join(''); 

    var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi; 
    var commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi; 
    return str.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) { 
    return allow.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''; 
    }); 
} 
+1

줄 바꿈'\ n'을 인식하도록 할 수 있습니다. –

+0

이 함수는 SO 사에 줄무늬가 있습니다. 적어도 commentsAndPhpTags 부분을 제거 할 수 있습니다. – backdesk

-1

DOM을 사용하면이 작업이 훨씬 간단합니다. 왜 사람들이 정규 표현식을 사용하려고하는지 모르겠습니다. 내가 생각하는 모든 태그 (안 내용을) 제거합니다

/** 
* Removes all tags with the provided tagName. 
* @param {Element} el The root element. 
* @param {string} tagName The tagName to match. 
* @example 
* >> document.body.innerHTML; 
* "<p><img src="foo.jpg">Some <strong>text</strong></p>" 
* >> stripTags(document.body, 'img'); 
* undefined 
* >> document.body.innerHTML; 
* "<p>Some <strong>text</strong></p>" 
* >> stripTags(document.body, 'strong'); 
* undefined 
* >> document.body.innerHTML; 
* "<p>Some text</p>" 
*/ 
function stripTags(el, tagName) { 
    var els = el.getElementsByTagName(tagName.toUpperCase()); 
    for (var i = 0; i < els.length; i++) { 
    while (els[i].firstChild) 
     els[i].parentNode.insertBefore(els[i].removeChild(els[i].firstChild), els[i]); 
    els[i].parentNode.removeChild(els[i--]); 
    } 
} 

방법 strip_tags 동작합니다입니다.

관련 문제