जवाबों:
यदि आप किसी ब्राउज़र में चल रहे हैं, तो सबसे आसान तरीका यह है कि ब्राउज़र को आपके लिए करने दें ...
function stripHtml(html)
{
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent || tmp.innerText || "";
}
नोट: जैसा कि लोगों ने टिप्पणियों में नोट किया है, यह सबसे अच्छा है यदि आप HTML के स्रोत को नियंत्रित नहीं करते हैं (उदाहरण के लिए, उपयोगकर्ता इनपुट से आ सकने वाली किसी भी चीज़ पर इसे न चलाएं)। उन परिदृश्यों के लिए, आप अभी भी ब्राउज़र को आपके लिए काम करने दे सकते हैं - अब व्यापक रूप से उपलब्ध DOMParser का उपयोग करने पर सबा का जवाब देखें ।
strip("<img onerror='alert(\"could run arbitrary JS here\")' src=bogus>")
myString.replace(/<[^>]*>?/gm, '');
<img src=http://www.google.com.kh/images/srpr/nav_logo27.png onload="alert(42)"
यदि आप इंजेक्शन के माध्यम से document.write
या एक स्ट्रिंग के साथ समाप्त कर रहे हैं तो काम नहीं करता है, जिसमें >
इंजेक्शन लगाने से पहले हो innerHTML
।
>
वसीयत को दूसरे में छोड़ दिया जाएगा। हालांकि यह एक इंजेक्शन खतरा नहीं है। <
पहले में बाएं के कारण खतरा होता है , जो दूसरे के शुरू होने पर HTML पार्सर को डेटा स्थिति के अलावा किसी अन्य संदर्भ में होने का कारण बनता है । ध्यान दें कि डेटा स्थिति से कोई संक्रमण नहीं है >
।
<button onClick="dostuff('>');"></button>
HTML को सही तरीके से लिखा गया मान लिया जाए, तो आप पूरी तरह से भ्रमित हो जाते हैं , फिर भी आपको इस बात का ध्यान रखना होगा कि एक विशेषता में उद्धृत पाठ में साइन से बड़ा हिस्सा कहीं हो सकता है। इसके अलावा <script>
, आप कम से कम टैग के अंदर के सभी पाठ को निकालना चाहेंगे ।
सबसे सरल तरीका:
jQuery(html).text();
यह html के एक स्ट्रिंग से सभी पाठ को पुनः प्राप्त करता है।
मैं शोग 9 के स्वीकृत उत्तर का एक संपादित संस्करण साझा करना चाहूंगा ।
जैसा कि माइक सैमुअल ने एक टिप्पणी के साथ बताया, वह फ़ंक्शन इनलाइन जावास्क्रिप्ट कोड निष्पादित कर सकता है।
लेकिन शोग 9 सही है जब कह रहा है "ब्राउज़र को आपके लिए करने दें ..."
तो .. यहाँ मेरा संपादित संस्करण, 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'>")
JQuery पद्धति के विस्तार के रूप में, यदि आपके स्ट्रिंग में HTML नहीं हो सकता है (जैसे यदि आप HTML को फ़ॉर्म फ़ील्ड से निकालने का प्रयास कर रहे हैं)
jQuery(html).text();`
यदि HTML नहीं है तो एक खाली स्ट्रिंग लौटाएगा
उपयोग:
jQuery('<p>' + html + '</p>').text();
बजाय।
अपडेट:
जैसा कि टिप्पणियों में बताया गया है, कुछ परिस्थितियों में यह समाधान निहित जावास्क्रिप्ट को निष्पादित करेगा html
यदि html
किसी हमलावर द्वारा मूल्य को प्रभावित किया जा सकता है, तो एक अलग समाधान का उपयोग करें।
$("<p>").html(html).text();
jQuery('<span>Text :) <img src="a" onerror="alert(1)"></span>').text()
हाइपोक्साइड द्वारा पोस्ट किया गया उपरोक्त फ़ंक्शन ठीक काम करता है, लेकिन मैं कुछ ऐसा था जो मूल रूप से HTML को वेब रिचटेक्स्ट एडिटर में बनाया गया था (उदाहरण के लिए FCKEditor) और सभी HTML को हटा दें, लेकिन इस तथ्य के कारण सभी लिंक छोड़ दें कि मुझे दोनों HTML चाहिए थे सादे टेक्स्ट संस्करण एक STMP ईमेल (HTML और सादे पाठ दोनों) के लिए सही हिस्से बनाने में सहायता करने के लिए।
Google को खोज करने के लंबे समय के बाद और जावास्क्रिप्ट में regex इंजन का उपयोग करके मेरे और मेरे कोलेजियम इस पर आए:
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)
, जहां $1
href URL / URI है और $2
हाइपरलिंक पाठ है। सादे पाठ के शरीर में सीधे लिंक के साथ अधिकांश एसएमटीपी मेल ग्राहक इन्हें परिवर्तित करते हैं, इसलिए उपयोगकर्ता के पास इन पर क्लिक करने की क्षमता होती है।
उम्मीद है कि आपके लिए यह उपयोगी रहे।
स्वीकृत उत्तर में सुधार।
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>")
फ़ायरफ़ॉक्स, क्रोमियम और एक्सप्लोरर 9+ सुरक्षित हैं। ओपेरा प्रेस्टो अभी भी असुरक्षित है। इसके अलावा स्ट्रिंग्स में उल्लिखित छवियां क्रोमियम और फ़ायरफ़ॉक्स में http अनुरोधों को सहेजने के लिए डाउनलोड नहीं की जाती हैं।
<script><script>alert();
यह किसी भी जावास्क्रिप्ट पर्यावरण (NodeJS शामिल) पर काम करना चाहिए।
const text = `
<html lang="en">
<head>
<style type="text/css">*{color:red}</style>
<script>alert('hello')</script>
</head>
<body><b>This is some text</b><br/><body>
</html>`;
// Remove style tags and content
text.replace(/<style[^>]*>.*<\/style>/gm, '')
// Remove script tags and content
.replace(/<script[^>]*>.*<\/script>/gm, '')
// Remove all opening, closing and orphan HTML tags
.replace(/<[^>]+>/gm, '')
// Remove leading spaces and repeated CR/LF
.replace(/([\r\n]+ +)+/gm, '');
<html><style..>* {font-family:comic-sans;}</style>Some Text</html>
मैं बदल Jibberboy2000 का जवाब कई शामिल करने के लिए <BR />
टैग प्रारूपों, निकालें सब कुछ अंदर <SCRIPT>
और<STYLE>
टैग को हटाने, कई लाइन ब्रेक और रिक्त स्थान को हटाने के परिणामस्वरूप HTML को प्रारूपित करने और कुछ HTML-एन्कोड किए गए कोड को सामान्य में बदलने के । कुछ परीक्षण के बाद ऐसा प्रतीत होता है कि आप अधिकांश पूर्ण वेब पृष्ठों को सरल पाठ में बदल सकते हैं जहाँ पृष्ठ शीर्षक और सामग्री बरकरार रहती है।
सरल उदाहरण में,
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!--comment-->
<head>
<title>This is my title</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style>
body {margin-top: 15px;}
a { color: #D80C1F; font-weight:bold; text-decoration:none; }
</style>
</head>
<body>
<center>
This string has <i>html</i> code i want to <b>remove</b><br>
In this line <a href="http://www.bbc.co.uk">BBC</a> with link is mentioned.<br/>Now back to "normal text" and stuff using <html encoding>
</center>
</body>
</html>
हो जाता है
यह मेरा शीर्षक है
इस स्ट्रिंग में html कोड है जिसे मैं हटाना चाहता हूं
इस पंक्ति में लिंक के साथ बीबीसी ( http://www.bbc.co.uk ) का उल्लेख है।
अब वापस "सामान्य पाठ" और सामान का उपयोग कर
जावास्क्रिप्ट फ़ंक्शन और परीक्षण पृष्ठ इसे देखते हैं:
function convertHtmlToText() {
var inputText = document.getElementById("input").value;
var returnText = "" + inputText;
//-- remove BR tags and replace them with line break
returnText=returnText.replace(/<br>/gi, "\n");
returnText=returnText.replace(/<br\s\/>/gi, "\n");
returnText=returnText.replace(/<br\/>/gi, "\n");
//-- remove P and A tags but preserve what's inside of them
returnText=returnText.replace(/<p.*>/gi, "\n");
returnText=returnText.replace(/<a.*href="(.*?)".*>(.*?)<\/a>/gi, " $2 ($1)");
//-- remove all inside SCRIPT and STYLE tags
returnText=returnText.replace(/<script.*>[\w\W]{1,}(.*?)[\w\W]{1,}<\/script>/gi, "");
returnText=returnText.replace(/<style.*>[\w\W]{1,}(.*?)[\w\W]{1,}<\/style>/gi, "");
//-- remove all else
returnText=returnText.replace(/<(?:.|\s)*?>/g, "");
//-- get rid of more than 2 multiple line breaks:
returnText=returnText.replace(/(?:(?:\r\n|\r|\n)\s*){2,}/gim, "\n\n");
//-- get rid of more than 2 spaces:
returnText = returnText.replace(/ +(?= )/g,'');
//-- get rid of html-encoded characters:
returnText=returnText.replace(/ /gi," ");
returnText=returnText.replace(/&/gi,"&");
returnText=returnText.replace(/"/gi,'"');
returnText=returnText.replace(/</gi,'<');
returnText=returnText.replace(/>/gi,'>');
//-- return
document.getElementById("output").value = returnText;
}
यह इस HTML के साथ प्रयोग किया गया था:
<textarea id="input" style="width: 400px; height: 300px;"></textarea><br />
<button onclick="convertHtmlToText()">CONVERT</button><br />
<textarea id="output" style="width: 400px; height: 300px;"></textarea><br />
/<p.*>/gi
होना चाहिए /<p.*?>/gi
।
<br>
टैग को हटाने के लिए आप इसके बजाय एक अच्छी नियमित अभिव्यक्ति का उपयोग कर सकते हैं: /<br\s*\/?>/
इस तरह से आपके पास केवल 3 के बजाय एक जगह है। इसके अलावा, यह मुझे भी लगता है कि संस्थाओं के डिकोडिंग के अलावा आपके पास एक एकल रेगेक्स हो सकता है, कुछ इस तरह से /<[a-z].*?\/?>/
:।
var text = html.replace(/<\/?("[^"]*"|'[^']*'|[^>])*(>|$)/g, "");
यह एक रेगेक्स संस्करण है, जो विकृत HTML के लिए अधिक लचीला है, जैसे:
अनछुए टैग
Some text <img
"<", ">" टैग विशेषताओं के अंदर
Some text <img alt="x > y">
नई-पंक्तियों
Some <a
href="http://google.com">
कोड
var html = '<br>This <img alt="a>b" \r\n src="a_b.gif" />is > \nmy<>< > <a>"text"</a'
var text = html.replace(/<\/?("[^"]*"|'[^']*'|[^>])*(>|$)/g, "");
दुसरा, नीज़ या शोग 9 की तुलना में, कम सुरुचिपूर्ण समाधान, पुनरावृत्ति से चलना होगा <body> टैग पर शुरू होने वाले DOM को फिर से चलना और प्रत्येक टेक्स्ट नोड को जोड़ना।
var bodyContent = document.getElementsByTagName('body')[0];
var result = appendTextNodes(bodyContent);
function appendTextNodes(element) {
var text = '';
// Loop through the childNodes of the passed in element
for (var i = 0, len = element.childNodes.length; i < len; i++) {
// Get a reference to the current child
var node = element.childNodes[i];
// Append the node's value if it's a text node
if (node.nodeType == 3) {
text += node.nodeValue;
}
// Recurse through the node's children, if there are any
if (node.childNodes.length > 0) {
appendTextNodes(node);
}
}
// Return the final result
return text;
}
यदि आप लिंक और कंटेंट की संरचना (h1, h2, आदि) को रखना चाहते हैं तो आपको TextVersionJS को देखना चाहिए। आप इसे किसी भी HTML के साथ उपयोग कर सकते हैं, हालाँकि इसे HTML ईमेल को सादे टेक्स्ट में बदलने के लिए बनाया गया था।
उपयोग बहुत सरल है। नोड में उदाहरण के लिए। Js:
var createTextVersion = require("textversionjs");
var yourHtml = "<h1>Your HTML</h1><ul><li>goes</li><li>here.</li></ul>";
var textVersion = createTextVersion(yourHtml);
या शुद्ध js वाले ब्राउज़र में:
<script src="textversion.js"></script>
<script>
var yourHtml = "<h1>Your HTML</h1><ul><li>goes</li><li>here.</li></ul>";
var textVersion = createTextVersion(yourHtml);
</script>
यह आवश्यकता के साथ भी काम करता है ।js:
define(["textversionjs"], function(createTextVersion) {
var yourHtml = "<h1>Your HTML</h1><ul><li>goes</li><li>here.</li></ul>";
var textVersion = createTextVersion(yourHtml);
});
उन सभी उत्तरों की कोशिश करने के बाद, जिनमें से सभी में किनारे के मामले नहीं थे और पूरी तरह से मेरी जरूरतों का समर्थन नहीं कर सकते थे।
मैंने यह पता लगाना शुरू कर दिया कि php यह कैसे करता है और php.js lib में आया है जो कि यहां strip_tags विधि की प्रतिकृति देता है: http://phpjs.org/functions/strip_tags/
allowed == ''
मुझे लगता है कि ओपी ने जो पूछा है, वह लगभग यही है जो बायरन ने नीचे उत्तर दिया (बायरन केवल [^>]
गलत है।)
allowed
परम का उपयोग करते हैं तो आप XSS के लिए असुरक्षित हैं: stripTags('<p onclick="alert(1)">mytext</p>', '<p>')
रिटर्न<p onclick="alert(1)">mytext</p>
function stripHTML(my_string){
var charArr = my_string.split(''),
resultArr = [],
htmlZone = 0,
quoteZone = 0;
for( x=0; x < charArr.length; x++ ){
switch( charArr[x] + htmlZone + quoteZone ){
case "<00" : htmlZone = 1;break;
case ">10" : htmlZone = 0;resultArr.push(' ');break;
case '"10' : quoteZone = 1;break;
case "'10" : quoteZone = 2;break;
case '"11' :
case "'12" : quoteZone = 0;break;
default : if(!htmlZone){ resultArr.push(charArr[x]); }
}
}
return resultArr.join('');
}
अंदर विशेषताओं के लिए और <img onerror="javascript">
नए बनाए गए डोम तत्वों में खाते ।
उपयोग:
clean_string = stripHTML("string with <html> in it")
डेमो:
https://jsfiddle.net/gaby_de_wilde/pqayphzd/
भयानक काम करने वाले शीर्ष उत्तर का डेमो:
string with <a malicious="attribute \">this text should be removed, but is not">example</a>
) के अंदर बच गए उद्धरणों को संभालने की आवश्यकता होगी ।
बहुत से लोगों ने इसका जवाब पहले ही दे दिया है, लेकिन मैंने सोचा कि यह उपयोगी हो सकता है कि मैंने जो फ़ंक्शन लिखा है वह स्ट्रिप्स से HTML टैग्स को साझा करे लेकिन आपको उन टैग्स की एक सरणी को शामिल करने की अनुमति देता है जो आप नहीं चाहते हैं। यह बहुत छोटा है और मेरे लिए अच्छी तरह से काम कर रहा है।
function removeTags(string, array){
return array ? string.split("<").filter(function(val){ return f(array, val); }).map(function(val){ return f(array, val); }).join("") : string.split("<").map(function(d){ return d.split(">").pop(); }).join("");
function f(array, value){
return array.map(function(d){ return value.includes(d + ">"); }).indexOf(true) != -1 ? "<" + value : value.split(">")[1];
}
}
var x = "<span><i>Hello</i> <b>world</b>!</span>";
console.log(removeTags(x)); // Hello world!
console.log(removeTags(x, ["span", "i"])); // <span><i>Hello</i> world!</span>
मुझे लगता है कि सबसे आसान तरीका सिर्फ रेगुलर एक्सप्रेशंस का उपयोग करना है जैसा कि ऊपर किसी ने बताया है। हालांकि उनमें से एक गुच्छा का उपयोग करने का कोई कारण नहीं है। प्रयत्न:
stringWithHTML = stringWithHTML.replace(/<\/?[a-z][a-z0-9]*[^<>]*>/ig, "");
[^<>]
साथ बदलना चाहिए [^>]
क्योंकि एक वैध टैग में एक <
वर्ण शामिल नहीं हो सकता है , फिर XSS भेद्यता गायब हो जाती है।
मैंने मूल Jibberboy2000 स्क्रिप्ट में कुछ संशोधन किए हैं। आशा है कि यह किसी के लिए उपयोगी होगा
str = '**ANY HTML CONTENT HERE**';
str=str.replace(/<\s*br\/*>/gi, "\n");
str=str.replace(/<\s*a.*href="(.*?)".*>(.*?)<\/a>/gi, " $2 (Link->$1) ");
str=str.replace(/<\s*\/*.+?>/ig, "\n");
str=str.replace(/ {2,}/gi, " ");
str=str.replace(/\n+\s*/gi, "\n\n");
यहाँ एक संस्करण है जो Sorta @ माइकसमुएल की सुरक्षा चिंता का समाधान करता है:
function strip(html)
{
try {
var doc = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null);
doc.documentElement.innerHTML = html;
return doc.documentElement.textContent||doc.documentElement.innerText;
} catch(e) {
return "";
}
}
ध्यान दें, यह खाली स्ट्रिंग लौटाएगा यदि HTML मार्कअप वैध XML (उर्फ, टैग बंद नहीं होना चाहिए और विशेषताओं को उद्धृत किया जाना चाहिए)। यह आदर्श नहीं है, लेकिन सुरक्षा शोषण क्षमता होने के मुद्दे से बचता है।
यदि वैध XML मार्कअप नहीं होना आपके लिए एक आवश्यकता है, तो आप उपयोग करने का प्रयास कर सकते हैं:
var doc = document.implementation.createHTMLDocument("");
लेकिन यह अन्य कारणों से सही समाधान नहीं है।
आप iframe सैंडबॉक्स विशेषता का उपयोग करके HTML टैग्स को सुरक्षित रूप से पट्टी कर सकते हैं ।
विचार यहाँ बजाय हमारे स्ट्रिंग regex की कोशिश की है, हम एक डोम तत्व में पाठ इंजेक्शन लगाने और फिर पूछताछ की ब्राउज़र की देशी पार्सर का लाभ लेने कि है textContent
/ innerText
उस तत्व की संपत्ति।
हमारे पाठ को इंजेक्ट करने के लिए सबसे उपयुक्त तत्व सैंडबॉक्स्ड इफ्रेम है, इस तरह हम किसी भी मनमाने कोड निष्पादन (जिसे XSS के रूप में भी जाना जाता है ) को रोक सकते हैं ।
इस दृष्टिकोण के नकारात्मक पक्ष यह है कि यह केवल ब्राउज़रों में काम करता है।
यहाँ मैं क्या लेकर आया हूँ (युद्ध-परीक्षण नहीं):
const stripHtmlTags = (() => {
const sandbox = document.createElement("iframe");
sandbox.sandbox = "allow-same-origin"; // <--- This is the key
sandbox.style.setProperty("display", "none", "important");
// Inject the sanbox in the current document
document.body.appendChild(sandbox);
// Get the sandbox's context
const sanboxContext = sandbox.contentWindow.document;
return (untrustedString) => {
if (typeof untrustedString !== "string") return "";
// Write the untrusted string in the iframe's body
sanboxContext.open();
sanboxContext.write(untrustedString);
sanboxContext.close();
// Get the string without html
return sanboxContext.body.textContent || sanboxContext.body.innerText || "";
};
})();
उपयोग ( डेमो ):
console.log(stripHtmlTags(`<img onerror='alert("could run arbitrary JS here")' src='bogus'>XSS injection :)`));
console.log(stripHtmlTags(`<script>alert("awdawd");</` + `script>Script tag injection :)`));
console.log(stripHtmlTags(`<strong>I am bold text</strong>`));
console.log(stripHtmlTags(`<html>I'm a HTML tag</html>`));
console.log(stripHtmlTags(`<body>I'm a body tag</body>`));
console.log(stripHtmlTags(`<head>I'm a head tag</head>`));
console.log(stripHtmlTags(null));
let
और const
ऑपरेटरों के साथ ब्लॉक में ठीक से स्कैन किए गए हैं । इसके अलावा, आपके समाधान का उपयोग करते हुए, मुझे iframes
दस्तावेज़ के अंदर उपयोग नहीं किए जाने के बहुत सारे संदर्भ मिले । document.body.removeChild(sandbox)
भविष्य के कॉपी-पास्ता आधारित पाठकों के लिए एक कोड जोड़ने पर विचार करें ।
नीचे दिए गए कोड आपको अन्य सभी को अलग करते हुए कुछ html टैग बनाए रखने की अनुमति देते हैं
function strip_tags(input, allowed) {
allowed = (((allowed || '') + '')
.toLowerCase()
.match(/<[a-z][a-z0-9]*>/g) || [])
.join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return input.replace(commentsAndPhpTags, '')
.replace(tags, function($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
}
phpjs
) को उद्धृत करना चाहिए । यदि आप allowed
परम का उपयोग करते हैं तो आप XSS के प्रति असुरक्षित हैं: stripTags('<p onclick="alert(1)">mytext</p>', '<p>')
रिटर्न<p onclick="alert(1)">mytext</p>
शानदार htmlparser2 शुद्ध JS HTML पार्सर का उपयोग करना भी संभव है । यहाँ एक कार्यशील डेमो है:
var htmlparser = require('htmlparser2');
var body = '<p><div>This is </div>a <span>simple </span> <img src="test"></img>example.</p>';
var result = [];
var parser = new htmlparser.Parser({
ontext: function(text){
result.push(text);
}
}, {decodeEntities: true});
parser.write(body);
parser.end();
result.join('');
आउटपुट होगा This is a simple example.
इसे यहां देखें: https://tonicdev.com/jfahrenkrug/extract-text-from-html
यह नोड और ब्राउज़र दोनों में काम करता है यदि आप वेबपैक जैसे टूल का उपयोग करके आपको वेब एप्लिकेशन पैक करते हैं।
मुझे सिर्फ स्ट्रिप आउट करने की जरूरत थी <a>
टैग हटाने और लिंक के पाठ के साथ बदलने की ।
यह महान काम करने लगता है।
htmlContent= htmlContent.replace(/<a.*href="(.*?)">/g, '');
htmlContent= htmlContent.replace(/<\/a>/g, '');
title="..."
।
आसान समाधान के लिए, यह प्रयास करें => https://css-tricks.com/snippets/javascript/strip-html-tags-in-javascript/
var StrippedString = OriginalString.replace(/(<([^>]+)>)/ig,"");
html को स्ट्रिप करने के लिए सरल 2 लाइन jquery।
var content = "<p>checking the html source </p><p>
</p><p>with </p><p>all</p><p>the html </p><p>content</p>";
var text = $(content).text();//It gets you the plain text
console.log(text);//check the data in your console
cj("#text_area_id").val(text);//set your content to text area using text_area_id
input
तत्व केवल एक पंक्ति पाठ का समर्थन करते हैं :
पाठ राज्य तत्व के मूल्य के लिए एक पंक्ति सादे पाठ संपादित नियंत्रण का प्रतिनिधित्व करता है।
function stripHtml(str) {
var tmp = document.createElement('input');
tmp.value = str;
return tmp.value;
}
अपडेट: यह उम्मीद के मुताबिक काम करता है
function stripHtml(str) {
// Remove some tags
str = str.replace(/<[^>]+>/gim, '');
// Remove BB code
str = str.replace(/\[(\w+)[^\]]*](.*?)\[\/\1]/g, '$2 ');
// Remove html and line breaks
const div = document.createElement('div');
div.innerHTML = str;
const input = document.createElement('input');
input.value = div.textContent || div.innerText || '';
return input.value;
}
(function($){
$.html2text = function(html) {
if($('#scratch_pad').length === 0) {
$('<div id="lh_scratch"></div>').appendTo('body');
}
return $('#scratch_pad').html(html).text();
};
})(jQuery);
इसे jquery प्लगइन के रूप में परिभाषित करें और इसे निम्नानुसार उपयोग करें:
$.html2text(htmlContent);