উত্তর:
আপনি যদি কোনও ব্রাউজারে চলছেন, তবে সহজতম উপায় হ'ল ব্রাউজারটি এটি আপনার জন্য করা ...
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
>
দ্বিতীয়টি বাকি থাকবে। যদিও এটি কোনও ইনজেকশন বিপত্তি নয়। বিপত্তিটি <
প্রথমদিকে বামের কারণে ঘটে থাকে , যার ফলে এইচটিএমএল পার্সার যখন দ্বিতীয় শুরু হয় তখন ডেটা স্টেট ব্যতীত অন্য প্রসঙ্গে থাকতে পারে । নোট করুন এখানে ডেটা অবস্থা থেকে কোনও রূপান্তর নেই >
।
<button onClick="dostuff('>');"></button>
সঠিকভাবে লিখিত এইচটিএমএল ধরে নেওয়ার মতো কিছু দেওয়া হলে , আপনাকে এখনও বিভ্রান্ত হয়ে পড়েছে , আপনাকে এখনও বিবেচনায় নেওয়া দরকার যে কোনও গুণাবলীর উদ্ধৃত পাঠ্যের চেয়ে বড় চিহ্নটি কোথাও হতে পারে। এছাড়াও আপনি <script>
ট্যাগগুলির অন্তর্ভুক্ত সমস্ত পাঠ্য অপসারণ করতে চান ।
সহজ উপায়:
jQuery(html).text();
এটি এইচটিএমএল এর স্ট্রিং থেকে সমস্ত পাঠ্য পুনরুদ্ধার করে।
আমি শোগ 9 এর অনুমোদিত উত্তরের একটি সম্পাদিত সংস্করণ ভাগ করতে চাই ।
মাইক স্যামুয়েল যেমন একটি মন্তব্যে ইঙ্গিত করেছেন, সেই ফাংশনটি ইনলাইন জাভাস্ক্রিপ্ট কোডগুলি কার্যকর করতে পারে।
তবে "ব্রাউজারটি এটি আপনার জন্য করুন ..." বলার সময় শোগ 9 ঠিক আছে "
সুতরাং .. এখানে আমার সম্পাদিত সংস্করণটি, ডোম পার্সার ব্যবহার করে :
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 পদ্ধতির এক্সটেনশন হিসাবে, যদি আপনার স্ট্রিংটিতে এইচটিএমএল না থাকতে পারে (যেমন আপনি যদি কোনও ফর্ম ক্ষেত্র থেকে এইচটিএমএল সরানোর চেষ্টা করছেন)
jQuery(html).text();`
এইচটিএমএল না থাকলে একটি খালি স্ট্রিং ফিরিয়ে দেবে
ব্যবহার করুন:
jQuery('<p>' + html + '</p>').text();
পরিবর্তে.
আপডেট:
মন্তব্যগুলিতে যেমন উল্লেখ করা হয়েছে, কিছু পরিস্থিতিতে এই সমাধানটির মধ্যে থাকা জাভাস্ক্রিপ্ট কার্যকর করা হবে html
যদি html
কোনও আক্রমণকারীর দ্বারা প্রভাবিত হতে পারে তবে ভিন্ন সমাধান ব্যবহার করুন।
$("<p>").html(html).text();
jQuery('<span>Text :) <img src="a" onerror="alert(1)"></span>').text()
হাইপোক্সাইড পোস্ট করা উপরের ফাংশনটি সূক্ষ্মভাবে কাজ করে, তবে আমি এমন কিছু পরেছিলাম যা একটি ওয়েব রিচটেক্সট সম্পাদক (উদাহরণস্বরূপ FCKEditor) তে মূলত এইচটিএমএলকে রূপান্তরিত করে এবং সমস্ত এইচটিএমএল সাফ করে দেয় তবে সমস্ত লিঙ্কগুলি রেখে যায় যে এইচটিএমএল এবং উভয়ই চেয়েছিলেন একটি STMP ইমেল (এইচটিএমএল এবং প্লেইন পাঠ্য উভয়) এর সঠিক অংশগুলি তৈরি করতে সহায়তা করার জন্য প্লেইন পাঠ্য সংস্করণ।
গুগল অনুসন্ধানের দীর্ঘ সময় পরে আমি এবং আমার কলেজগুলি জাভাস্ক্রিপ্টে রেজেক্স ইঞ্জিন ব্যবহার করে এটি নিয়ে এসেছি:
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
আপনি দেখতে পাচ্ছেন যে সমস্ত এইচটিএমএল সরিয়ে ফেলা হয়েছে এবং হাইপার-লিঙ্কযুক্ত পাঠ্যটির সাথে লিঙ্কটি স্থির করা হয়েছে এখনও অক্ষত। এছাড়াও আমি এর সাথে ট্যাগগুলি <p>
এবং প্রতিস্থাপন করেছি<br>
\n
(সম্পর্কে newline গৃহস্থালির কাজ) যাতে চাক্ষুষ বিন্যাস কিছু বাছাই অপরিবর্তিত রাখা হয়েছে।
লিঙ্ক ফর্ম্যাটটি (উদাহরণস্বরূপ BBC (Link->http://www.bbc.co.uk)
) পরিবর্তন করতে কেবল সম্পাদনা করুন $2 (Link->$1)
, যেখানে $1
href ইউআরএল / ইউআরআই এবং $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();
এটি কোনও জাভাস্ক্রিপ্ট পরিবেশে কাজ করা উচিত (নোডজেএস অন্তর্ভুক্ত)।
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>
ট্যাগগুলি মুছে ফেলার জন্য, একাধিক লাইন বিরতি এবং স্পেসগুলি সরিয়ে ফলাফলের এইচটিএমএলকে ফর্ম্যাট করতে এবং কিছু এইচটিএমএল-এনকোড । কিছু পরীক্ষার পরে দেখা যাচ্ছে যে আপনি বেশিরভাগ পূর্ণ ওয়েব পৃষ্ঠাগুলিকে সাধারণ পাঠ্যে রূপান্তর করতে পারেন যেখানে পৃষ্ঠার শিরোনাম এবং সামগ্রী বজায় রাখা আছে।
সাধারণ উদাহরণে,
<!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>
হয়ে
এটি আমার শিরোনাম
এই স্ট্রিংটিতে এইচটিএমএল কোড রয়েছে যা আমি মুছে ফেলতে চাই
এই লাইনে বিবিসি ( 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;
}
এটি এই এইচটিএমএল দিয়ে ব্যবহৃত হয়েছিল:
<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 এর পরিবর্তে আপনার কেবলমাত্র একটি প্রতিস্থাপন থাকতে পারে Also এছাড়াও আমার কাছে মনে হয় যে সত্তাগুলির ডিকোডিং ব্যতীত আপনার একটি একক রেজেক্স থাকতে পারে: এর মতো কিছু /<[a-z].*?\/?>/
।
var text = html.replace(/<\/?("[^"]*"|'[^']*'|[^>])*(>|$)/g, "");
এটি একটি রেইজেক্স সংস্করণ, যা ত্রুটিযুক্ত এইচটিএমএল এর চেয়ে বেশি স্থিতিস্থাপক, যেমন:
অনাবৃত ট্যাগ
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> ট্যাগ থেকে শুরু করে ডমকে হাঁটতে হবে এবং প্রতিটি পাঠ্য নোড যুক্ত করা হবে।
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;
}
আপনি যদি লিঙ্কগুলি এবং সামগ্রীর কাঠামোটি রাখতে চান (এইচ 1, এইচ 2, ইত্যাদি) তবে আপনার পাঠ্য ভার্সন জেএস পরীক্ষা করে দেখা উচিত আপনি এটি কোনও HTML সহ ব্যবহার করতে পারেন, যদিও এটি কোনও HTML ইমেলকে সরল পাঠ্যে রূপান্তর করার জন্য তৈরি করা হয়েছিল।
ব্যবহার খুব সহজ। উদাহরণস্বরূপ নোড.জেজে:
var createTextVersion = require("textversionjs");
var yourHtml = "<h1>Your HTML</h1><ul><li>goes</li><li>here.</li></ul>";
var textVersion = createTextVersion(yourHtml);
বা খাঁটি জেএস সহ ব্রাউজারে:
<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>
এটি প্রয়োজনীয় জাজের সাথেও কাজ করে:
define(["textversionjs"], function(createTextVersion) {
var yourHtml = "<h1>Your HTML</h1><ul><li>goes</li><li>here.</li></ul>";
var textVersion = createTextVersion(yourHtml);
});
উত্তরগুলি উল্লেখ করার পরে সর্বাধিক উল্লিখিত সমস্ত উত্তরগুলির চেষ্টা করেও যদি তাদের সকলেরই কিনারা হয় না এবং আমার প্রয়োজনগুলি সম্পূর্ণরূপে সমর্থন করতে না পারে।
আমি পিএইচপি এটি কীভাবে করে তা অন্বেষণ করা শুরু করেছি এবং পিএইচপি.জেএস লাইব জুড়ে এসেছি যা এখানে স্ট্রিপ_ট্যাগ পদ্ধতিটি প্রতিলিপি করে তোলে: http://phpjs.org/funitions/strip_tags/
allowed == ''
আমি মনে করি যে ওপি যা চেয়েছিল, যা বায়রন নীচে জবাব দিয়েছে (বায়রন কেবল [^>]
ভুল পেয়েছে ))
allowed
প্যারাম এক্সএসএসের ঝুঁকির মধ্যে আছেন: 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>
)।
অনেক লোক ইতিমধ্যে এর জবাব দিয়েছে, তবে আমি ভেবেছিলাম যে আমি লিখেছি যে ফাংশনটি আমি লিখেছিলাম যে এটি স্ট্রিম থেকে এইচটিএমএল ট্যাগগুলি স্ট্রিপ করে তবে আপনি যে ট্যাগগুলি ছিনিয়ে নিতে চান না সেগুলির একটি অ্যারে অন্তর্ভুক্ত করার অনুমতি দেয়। এটি বেশ সংক্ষিপ্ত এবং আমার জন্য সুন্দরভাবে কাজ করে চলেছে।
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, "");
[^<>]
সাথে এটি পরিবর্তন করা উচিত [^>]
কারণ একটি বৈধ ট্যাগটিতে একটি <
অক্ষর অন্তর্ভুক্ত করা যায় না , তবে এক্সএসএস দুর্বলতা অদৃশ্য হয়ে যায়।
আমি আসল জাইবারবয় ২000 স্ক্রিপ্টে কিছু পরিবর্তন করেছি আশা করি এটি কারও পক্ষে কার্যকর হবে
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");
@ মাইকসামুয়েল এর সুরক্ষার উদ্বেগের বিষয়ে বাছাই করা একটি সংস্করণ এখানে রয়েছে:
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 "";
}
}
দ্রষ্টব্য, এইচটিএমএল মার্কআপটি বৈধ এক্সএমএল না হলে এটি একটি খালি স্ট্রিং ফিরিয়ে দেবে (ওরফে, ট্যাগগুলি অবশ্যই বন্ধ করতে হবে এবং বৈশিষ্ট্যগুলি উদ্ধৃত করতে হবে)। এটি আদর্শ নয়, তবে সুরক্ষার সম্ভাবনা কাজে লাগানোর বিষয়টি এড়ানো যায় না।
যদি আপনার জন্য বৈধ এক্সএমএল মার্কআপ না রাখা প্রয়োজন হয় তবে আপনি এটি ব্যবহার করে দেখতে পারেন:
var doc = document.implementation.createHTMLDocument("");
তবে এটি অন্য কারণেও একটি নিখুঁত সমাধান নয়।
আপনি iframe স্যান্ডবক্স অ্যাট্রিবিউট ব্যবহার করে নিরাপদে html ট্যাগগুলি স্ট্রিপ করতে পারেন ।
এখানে ধারণাটি হ'ল আমাদের স্ট্রিংটিকে পুনরায় প্রয়োগ করার চেষ্টা করার পরিবর্তে, আমরা একটি ডিওএম উপাদানটিতে পাঠ্যটি ইনজেকশন দিয়ে এবং তারপরে সেই উপাদানটির textContent
/ innerText
সম্পত্তি অনুসন্ধান করে ব্রাউজারের নেটিভ পার্সারটির সুবিধা গ্রহণ করি ।
আমাদের পাঠ্যটিকে ইনজেক্ট করার জন্য সবচেয়ে উপযুক্ত উপাদানটি হ'ল একটি স্যান্ডবক্সযুক্ত আইফ্রেমে, এইভাবে আমরা যেকোন স্বেচ্ছাসেবক কোড কার্যকর করতে বাধা দিতে পারি (এটি এক্সএসএস নামে পরিচিত )।
এই পদ্ধতির খারাপ দিকটি এটি কেবল ব্রাউজারগুলিতে কাজ করে।
আমি যা নিয়ে এসেছি তা এখানে (যুদ্ধ-পরীক্ষিত নয়):
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)
ভবিষ্যতের অনুলিপি-পাস্তা ভিত্তিক পাঠকদের জন্য কোডে একটি যুক্ত করার কথা বিবেচনা করুন ।
কোডের নীচে আপনাকে অন্য সকলকে সরিয়ে দেওয়ার সময় কিছু এইচটিএমএল ট্যাগ ধরে রাখতে দেয়
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
প্যারাম ব্যবহার করেন তবে আপনি এক্সএসএসের ঝুঁকির মধ্যে আছেন: stripTags('<p onclick="alert(1)">mytext</p>', '<p>')
ফিরে আসে<p onclick="alert(1)">mytext</p>
চমত্কার htmlparser2 খাঁটি জেএসএমএল এইচটিএমএল পার্সার ব্যবহার করাও সম্ভব । এখানে একটি কার্যকারী ডেমো রয়েছে:
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,"");
এইচটিএমএল ফালা সরল 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
গৃহীত উত্তরটি বেশিরভাগ ক্ষেত্রে সূক্ষ্মভাবে কাজ করে, তবে html
স্ট্রিংটি যদি null
আপনি "null"
('' এর পরিবর্তে) পান তবে আই.ই. ফিক্সড:
function strip(html)
{
if (html == null) return "";
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent || tmp.innerText || "";
}
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);