답변:
HTML의 문법이 너무 복잡해서 정규식이 100 % 정확하기에는 너무 복잡하다는 점에 유의하십시오.
var regex = /(<([^>]+)>)/ig
, body = "<p>test</p>"
, result = body.replace(regex, "");
console.log(result);
jQuery 와 같은 라이브러리를 사용하려면 다음과 같이 하면됩니다.
console.log($('<p>test</p>').text());
"<img src=bogus onerror=alert(1337)"
. 첫 번째는 HTML 파서가 마지막 태그를로 닫을 필요 >
가 없기 때문에 실패하고, 두 번째는 파싱 된 DOM 트리가 DOM에 추가되기 전에 이미지로드가 시작 $('<img ...>')
되어 HTML 파서를 호출 하기 때문에 실패합니다 .
>
속성 값에 a 가 포함되어 있으면 정규식 솔루션도 실패 합니다. 이 같은<div data="a + b > c">
이것은 오래된 질문이지만 우연히 발견하고 내가 사용한 방법을 공유 할 것이라고 생각했습니다.
var body = '<div id="anid">some <a href="link">text</a></div> and some more text';
var temp = document.createElement("div");
temp.innerHTML = body;
var sanitized = temp.textContent || temp.innerText;
sanitized
이제 다음이 포함됩니다. "some text and some more text"
간단하고 jQuery가 필요하지 않으며 더 복잡한 경우에도 실망하지 않아야합니다.
innerText
temp.textContent
존재 하는 경우 출력을 선택하고 temp.innerText
그렇지 않은 경우 에만 시도 합니다. :) 브라우저가 이전을해야하지만하지 않는 브라우저, 후자가 대신 사용됩니다
이것은 나를 위해 일했습니다.
var regex = /( |<([^>]+)>)/ig
, body = tt
, result = body.replace(regex, "");
alert(result);
console.log( my_html.replace(/( |<([^>]+)>)/ig, "") );
TextAngular (WYSISYG Editor)가 수행하는 방법은 다음과 같습니다. 나는 또한 이것이 가장 일관된 대답 인 NO REGEX라는 것을 발견했습니다.
@license textAngular
Author : Austin Anderson
License : 2013 MIT
Version 1.5.16
// turn html into pure text that shows visiblity
function stripHtmlToText(html)
{
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
var res = tmp.textContent || tmp.innerText || '';
res.replace('\u200B', ''); // zero width space
res = res.trim();
return res;
}
undrescore.string.js 인 관리 문자열에 강력한 라이브러리를 사용할 수 있습니다.
_('a <a href="#">link</a>').stripTags()
=> '링크'
_('a <a href="#">link</a><script>alert("hello world!")</script>').stripTags()
=> 'a linkalert ( "hello world!")'
이 lib를 다음과 같이 가져 오는 것을 잊지 마십시오.
<script src="underscore.js" type="text/javascript"></script>
<script src="underscore.string.js" type="text/javascript"></script>
<script type="text/javascript"> _.mixin(_.str.exports())</script>
FuncJS라는 내 간단한 JavaScript 라이브러리에는 정규식을 입력하지 않고도 작업을 수행하는 "strip_tags ()"라는 함수가 있습니다.
예를 들어 문장에서 태그를 제거하고 싶다고 가정 해 보겠습니다.이 함수를 사용하면 다음과 같이 간단하게 수행 할 수 있습니다.
strip_tags("This string <em>contains</em> <strong>a lot</strong> of tags!");
그러면 "이 문자열에는 많은 태그가 포함되어 있습니다!"가 생성됩니다.
더 나은 이해를 위해 GitHub FuncJS 에서 문서를 읽으십시오 .
또한 원하는 경우 양식을 통해 몇 가지 피드백을 제공하십시오. 나에게 매우 도움이 될 것입니다!
strip_tags()
라이브러리를 홍보하고 설명하지 않고 무엇을 제공 할 수 있습니까? 링크는 API 사용법을 설명하지만 그 기능은 설명 하지 않습니다 .
strip_tags = function(e) { var _hasTag, _tag_string; if (!(e === void 0 || e === null || e === "")) { _tag_string = e; if (typeof _tag_string === "object") { _tag_string = _tag_string.outerHTML; } _hasTag = _tag_string.match(/(<([^>]+)>)/ig); if (_hasTag) { return trim(_tag_string.replace(/(<([^>]+)>)/ig, '')); } else { return trim(_tag_string); } } else { throw new Error("The 'strip_tags' function expects one argument in the form of a string or object."); } };
JS의 적절한 HTML 새니 타이 저에 대해서는 http://code.google.com/p/google-caja/wiki/JsHtmlSanitizer를 참조하십시오 .
<html>
<head>
<script type="text/javascript">
function striptag(){
var html = /(<([^>]+)>)/gi;
for (i=0; i < arguments.length; i++)
arguments[i].value=arguments[i].value.replace(html, "")
}
</script>
</head>
<body>
<form name="myform">
<textarea class="comment" title="comment" name=comment rows=4 cols=40></textarea><br>
<input type="button" value="Remove HTML Tags" onClick="striptag(this.form.comment)">
</form>
</body>
</html>
선택한 답변은 다음과 같은 문자열을 작성하여 잘못된 HTML 문자열을 구성 할 수 있으므로 HTML이 항상 제거되는 것을 보장하지는 않습니다.
"<<h1>h1>foo<<//</h1>h1/>"
이 입력은 스트리핑이 사용자를 위해 태그 세트를 조립하도록 보장하며 결과는 다음과 같습니다.
"<h1>foo</h1>"
또한 jquery의 텍스트 함수는 태그로 둘러싸여 있지 않은 텍스트를 제거합니다.
다음은 jQuery를 사용하지만이 두 경우 모두에 대해 더 강력해야하는 함수입니다.
var stripHTML = function(s) {
var lastString;
do {
s = $('<div>').html(lastString = s).text();
} while(lastString !== s)
return s;
};
제가하는 방식은 사실상 한 줄짜리입니다.
이 함수는 Range 개체 를 만든 다음 문자열을 자식 콘텐츠로 사용하여 Range에 DocumentFragment 를 만듭니다 .
그런 다음 조각의 텍스트를 가져 와서 "보이지 않는"/ 폭이 0 인 문자를 제거하고 선행 / 후행 공백을 제거합니다.
나는이 질문이 오래되었다는 것을 알고 있으며, 내 솔루션이 독특하다고 생각하고 공유하고 싶었습니다. :)
function getTextFromString(htmlString) {
return document
.createRange()
// Creates a fragment and turns the supplied string into HTML nodes
.createContextualFragment(htmlString)
// Gets the text from the fragment
.textContent
// Removes the Zero-Width Space, Zero-Width Joiner, Zero-Width No-Break Space, Left-To-Right Mark, and Right-To-Left Mark characters
.replace(/[\u200B-\u200D\uFEFF\u200E\u200F]/g, '')
// Trims off any extra space on either end of the string
.trim();
}
var cleanString = getTextFromString('<p>Hello world! I <em>love</em> <strong>JavaScript</strong>!!!</p>');
alert(cleanString);