[javascript] 텍스트 JavaScript에서 HTML 제거

JavaScript에서 html 문자열을 가져 와서 html을 제거하는 쉬운 방법이 있습니까?



답변

브라우저에서 실행중인 경우 가장 쉬운 방법은 브라우저가 브라우저 를 대신 하도록하는 것입니다 …

function stripHtml(html)
{
   var tmp = document.createElement("DIV");
   tmp.innerHTML = html;
   return tmp.textContent || tmp.innerText || "";
}

참고 : 사람들이 주석에서 언급했듯이 HTML 소스를 제어하지 않으면 (예를 들어 사용자 입력에서 얻을 수있는 것에서 실행하지 마십시오) 피하는 것이 가장 좋습니다. 이러한 시나리오의 경우 에도 브라우저에서 작업을 수행 할 수 있습니다 . 현재 널리 사용되는 DOMParser 사용에 대한 Saba의 답변을 참조하십시오 .


답변

myString.replace(/<[^>]*>?/gm, '');


답변

가장 간단한 방법 :

jQuery(html).text();

html 문자열에서 모든 텍스트를 검색합니다.


답변

Shog9 의 승인 된 답변의 편집 된 버전을 공유하고 싶습니다 .


Mike Samuel 이 주석으로 지적한 것처럼 이 함수는 인라인 자바 스크립트 코드를 실행할 수 있습니다.
그러나 Shog9 “브라우저가 대신 해줄 것”이라고 말할 때 가 옳습니다.

그래서 .. 여기 DOMParser를 사용하여 편집 한 버전 :

function strip(html){
   var doc = new DOMParser().parseFromString(html, 'text/html');
   return doc.body.textContent || "";
}

다음은 인라인 자바 스크립트를 테스트하는 코드입니다.

strip("<img onerror='alert(\"could run arbitrary JS here\")' src=bogus>")

또한 이미지와 같은 구문 분석에 대한 리소스를 요청하지 않습니다.

strip("Just text <img src='https://assets.rbl.ms/4155638/980x.jpg'>")


답변

문자열에 HTML이 포함되어 있지 않은 경우 (예 : 양식 필드에서 HTML을 제거하려는 경우) jQuery 메소드의 확장으로

jQuery(html).text();`

HTML이 없으면 빈 문자열을 반환합니다

사용하다:

jQuery('<p>' + html + '</p>').text();

대신에.

업데이트 :
의견에서 지적했듯이 어떤 상황 에서이 솔루션은 공격자의 영향 htmlhtml받을 수있는 경우 안에 포함 된 자바 스크립트를 실행 하고 다른 솔루션을 사용합니다.


답변

하이퍼 링크 (a href)를 그대로 유지하면서 일반 텍스트 전자 메일로 HTML 변환

hypoxide에 의해 게시 된 위의 기능은 정상적으로 작동하지만 기본적으로 웹 RichText 편집기 (예 : FCKEditor)에서 생성 된 HTML을 변환하고 모든 HTML을 지우고 HTML과 STMP 전자 메일에 올바른 부분을 만드는 데 도움이되는 일반 텍스트 버전 (HTML 및 일반 텍스트)

오랜 시간 동안 Google을 직접 검색 한 후 동료가 Javascript의 정규식 엔진을 사용 하여이 문제를 해결했습니다.

str='this string has <i>html</i> code i want to <b>remove</b><br>Link Number 1 -><a href="http://www.bbc.co.uk">BBC</a> Link Number 1<br><p>Now back to normal text and stuff</p>
';
str=str.replace(/<br>/gi, "\n");
str=str.replace(/<p.*>/gi, "\n");
str=str.replace(/<a.*href="(.*?)".*>(.*?)<\/a>/gi, " $2 (Link->$1) ");
str=str.replace(/<(?:.|\s)*?>/g, "");

str변수는이처럼 시작한다 :

this string has <i>html</i> code i want to <b>remove</b><br>Link Number 1 -><a href="http://www.bbc.co.uk">BBC</a> Link Number 1<br><p>Now back to normal text and stuff</p>

그런 다음 코드가 실행되면 다음과 같습니다.

this string has html code i want to remove
Link Number 1 -> BBC (Link->http://www.bbc.co.uk)  Link Number 1


Now back to normal text and stuff

보시다시피 모든 HTML이 제거되었고 하이퍼 링크로 연결된 링크가 그대로 유지되었습니다. 또한 나는 대체했다 <p><br>함께 태그를\n 일종의 시각적 형식이 유지되도록 (줄 바꿈 문자)로 바꿨습니다.

링크 형식 (예 :)을 변경하려면을 BBC (Link->http://www.bbc.co.uk)편집하십시오 $2 (Link->$1). 여기서 $1href URL / URI $2는 하이퍼 링크 텍스트입니다. 일반 텍스트 본문에 직접 링크가 있으면 대부분의 SMTP 메일 클라이언트가이를 변환하여 사용자가 해당 링크를 클릭 할 수 있습니다.

이 정보가 도움이 되길 바랍니다.


답변

허용 된 답변 개선.

function strip(html)
{
   var tmp = document.implementation.createHTMLDocument("New").body;
   tmp.innerHTML = html;
   return tmp.textContent || tmp.innerText || "";
}

이런 식으로 이런 식으로 실행하면 해를 끼치 지 않습니다.

strip("<img onerror='alert(\"could run arbitrary JS here\")' src=bogus>")

Firefox, Chromium 및 Explorer 9 이상이 안전합니다. 오페라 프레스토는 여전히 취약하다. 또한 문자열에 언급 된 이미지는 Chromium 및 Firefox에서 http 요청을 저장하여 다운로드되지 않습니다.