উত্তর:
সুরক্ষা দ্রষ্টব্য: এই উত্তরটি (নীচে তার মূল ফর্মটিতে সংরক্ষিত) ব্যবহার করা আপনার অ্যাপ্লিকেশনটিতে একটি এক্সএসএস দুর্বলতার পরিচয় দিতে পারে । আপনার এই উত্তরটি ব্যবহার করা উচিত নয়। এই উত্তরের দুর্বলতার ব্যাখ্যার জন্য লুকাস্কারোর জবাবটি পড়ুন এবং সেই উত্তরটি বা মার্ক আমেরির উত্তর থেকে যে কোনওটি ব্যবহার করুন ।
আসলে, চেষ্টা করুন
var decoded = $("<div/>").html(encodedStr).text();
$("<div/>").html('<img src="http://www.google.com/images/logos/ps_logo2.png" onload=alert(1337)>')। ফায়ারফক্স বা সাফারিতে এটি সতর্কতা ছড়িয়ে দেয়।
str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/g, "")বা অনুরূপ কিছু।
কোন jQuery ছাড়া:
function decodeEntities(encodedString) {
var textArea = document.createElement('textarea');
textArea.innerHTML = encodedString;
return textArea.value;
}
console.log(decodeEntities('1 & 2')); // '1 & 2'
এটি গৃহীত উত্তরের মতো একইভাবে কাজ করে তবে অবিশ্বস্ত ব্যবহারকারী ইনপুট সহ এটি নিরাপদ।
মাইক স্যামুয়েল দ্বারা উল্লিখিত হিসাবে , অবিশ্বস্ত ব্যবহারকারী ইনপুটটির <div>পরিবর্তে <textarea>এটি করা একটি এক্সএসএস দুর্বলতা, এমনকি যদি ডোমে <div>কখনও যুক্ত না হয়:
function decodeEntities(encodedString) {
var div = document.createElement('div');
div.innerHTML = encodedString;
return div.textContent;
}
// Shows an alert
decodeEntities('<img src="nonexistent_image" onerror="alert(1337)">')
তবে, এই আক্রমণটি কোনওটির বিরুদ্ধে সম্ভব নয় <textarea>কারণ কোনও HTML উপাদান নেই যা এর সামগ্রীতে অনুমোদিত <textarea>। ফলস্বরূপ, 'এনকোডড' স্ট্রিংটিতে এখনও উপস্থিত যে কোনও এইচটিএমএল ট্যাগ ব্রাউজার দ্বারা স্বয়ংক্রিয়ভাবে সত্তা-এনকোড হবে।
function decodeEntities(encodedString) {
var textArea = document.createElement('textarea');
textArea.innerHTML = encodedString;
return textArea.value;
}
// Safe, and returns the correct answer
console.log(decodeEntities('<img src="nonexistent_image" onerror="alert(1337)">'))
সতর্কবাণী : এই jQuery এর মধ্যে ব্যবহার করছেন
.html()এবং.val()পরিবর্তে ব্যবহার করার পদ্ধতি.innerHTMLএবং.valueএছাড়াও jQuery এর কিছু সংস্করণের জন্য অনিরাপদ * হয়, যখন একটি ব্যবহার করা বেশিtextarea। এটি কারণ jQuery এর পুরানো সংস্করণগুলি ইচ্ছাকৃতভাবে এবং স্পষ্টভাবে স্ট্রিংয়ের মধ্যে থাকা স্ক্রিপ্টগুলিতে মূল্যায়ন করেছিল.html()। সুতরাং এই জাতীয় কোড jQuery 1.8 এ একটি সতর্কতা দেখায়:
//<!-- CDATA
// Shows alert
$("<textarea>")
.html("<script>alert(1337);</script>")
.text();
//-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
* এই দুর্বলতা ধরার জন্য ইরু পেনম্যানকে ধন্যবাদ ।
decodedString = textArea.value; textArea.remove(); return decodedString;
if ('remove' in Element.prototype) textArea.remove();
$("<div />").html(string).text() প্রদত্ত স্ট্রিংগুলিতে যে কোনও জাভাস্ক্রিপ্ট কার্যকর করবেন , যা আমার সন্দেহ হয় যা আপনার সমস্যার কারণ হয়েছিল। গৃহীত উত্তরটি এইটিতে আপডেট করা উচিত।
মাইক স্যামুয়েল যেমন বলেছেন, এইচটিএমএল সত্তাটি অনিরাপদ হিসাবে ডিকোড করতে jQuery.html ()। পাঠ্য () ব্যবহার করবেন না।
পরিবর্তে, মত একটি টেমপ্লেট রেন্ডারার ব্যবহার Mustache.js বা decodeEntities @ VyvIT এর মন্তব্য থেকে।
অ্যান্ডসোর.জেএস ইউটিলিটি-বেল্ট লাইব্রেরি escapeএবং unescapeপদ্ধতিগুলি নিয়ে আসে তবে তারা ব্যবহারকারীর ইনপুট জন্য নিরাপদ নয়:
unescapeএতক্ষণে ডক্সে অন্তর্ভুক্ত করেছে , বিটিডাব্লু।
_.unescape("'")কেবল "& # 39;" এ ফলাফল পরিবর্তে একক উদ্ধৃতি। আমি কি অনুপস্থিত এমন কিছু আছে বা দেখায় যেমন এইচটিএমএল সত্তা কোডগুলিতে আন্ডারস্কোর করা যায় না: w3schools.com/tags/ref_entities.asp
escapeএবং unescapeপদ্ধতিগুলি ... ব্যবহারকারী ইনপুট জন্য নিরাপদ নয়" । আপনি এই দ্বারা কি বোঝাতে চেয়েছেন? এটি আমার কাছে আজেবাজে লাগছে, তবে সম্ভবত আমি কিছু মিস করছি - আপনি কি স্পষ্ট করে বলতে পারেন?
_.unescape("<img src=fake onerror=alert('boo!')>")(ক্রোম / এফএফ / আইই মধ্যে)। তবে এটি কোনও সতর্কতা দেখায়নি । এটি কনসোলে চেষ্টা করার পাশাপাশি এটি আমার জেএস ফাইলেও রেখেছিল। একই ফলাফল।
আমি মনে করি আপনি পাঠ্য এবং এইচটিএমএল পদ্ধতি গুলিয়ে ফেলছেন। এই উদাহরণটি দেখুন, আপনি যদি কোনও উপাদানের অভ্যন্তরীণ এইচটিএমএলটিকে পাঠ্য হিসাবে ব্যবহার করেন তবে আপনি ডিকোড হওয়া এইচটিএমএল ট্যাগগুলি পাবেন (দ্বিতীয় বোতাম)। আপনি যদি এইচটিএমএল হিসাবে ব্যবহার করেন তবে আপনি এইচটিএমএল বিন্যাসিত ভিউ পাবেন (প্রথম বোতাম)।
<div id="myDiv">
here is a <b>HTML</b> content.
</div>
<br />
<input value="Write as HTML" type="button" onclick="javascript:$('#resultDiv').html($('#myDiv').html());" />
<input value="Write as Text" type="button" onclick="javascript:$('#resultDiv').text($('#myDiv').html());" />
<br /><br />
<div id="resultDiv">
Results here !
</div>
প্রথম বোতামটি লিখেছেন: এখানে একটি HTML সামগ্রী রয়েছে।
দ্বিতীয় বোতামটি লিখেছেন: এখানে একটি <B> এইচটিএমএল </ b> সামগ্রী রয়েছে।
যাইহোক, আপনি jQuery প্লাগইন -এ আমি খুঁজে পেয়েছি এমন একটি প্লাগ-ইন দেখতে পাচ্ছেন - এইচটিএমএল ডিকোড এবং এনকোড যা এইচটিএমএল স্ট্রিংগুলি এনকোড এবং ডিকোড করে।
প্রশ্নটি 'jQuery সহ' দ্বারা সীমাবদ্ধ তবে এটি কয়েকজনকে জানতে সাহায্য করতে পারে যে সর্বোত্তম উত্তরে প্রদত্ত jQuery কোডটি নীচের নীচে করে ... এটি jQuery এর সাথে বা ছাড়াই কাজ করে:
function decodeEntities(input) {
var y = document.createElement('textarea');
y.innerHTML = input;
return y.value;
}
আপনি https://github.com/mathiasbynens/he থেকে উপলভ্য তিনি লাইব্রেরিটি ব্যবহার করতে পারেন
উদাহরণ:
console.log(he.decode("Jörg & Jürgen rocked to & fro "));
// Logs "Jörg & Jürgen rocked to & fro"
আমি এখানে এবং অন্য কোথাও অন্যান্য উত্তরে প্রদত্ত হ্যাকের পক্ষে ক্লায়েন্টাইড কোডে এই গ্রন্থাগারটি ব্যবহার করার কোনও কারণ ছিল কিনা কিনা এই প্রশ্নে আমি গ্রন্থাগারের লেখককে চ্যালেঞ্জ জানাই । তিনি কয়েকটি সম্ভাব্য ন্যায্যতা সরবরাহ করেছেন:<textarea>
আপনি যদি নোড.জেএস সার্ভারসাইড ব্যবহার করেন, এইচটিএমএল এনকোডিং / ডিকোডিংয়ের জন্য একটি লাইব্রেরি ব্যবহার করা আপনাকে একক সমাধান দেয় যা ক্লায়েন্টাইড এবং সার্ভারসাইড উভয়ই কাজ করে।
কিছু ব্রাউজারের সত্তা ডিকোডিং অ্যালগরিদমগুলিতে বাগ থাকে বা কিছু নামী অক্ষর রেফারেন্সের জন্য সমর্থন অনুপস্থিত । উদাহরণস্বরূপ, ইন্টারনেট এক্সপ্লোরার উভয়কে সঠিকভাবে ডিকোড করবে এবং নন-ব্রেকিং স্পেস ( ) সঠিকভাবে রেন্ডার করবে তবে ড্যাকের উপাদানটির মাধ্যমে হ্যাকটি innerTextভেঙে <textarea>ফেলবে না (কেবলমাত্র একটি ছোট উপায়েই) breaking অতিরিক্ত হিসাবে, আইই 8 এবং 9 কেবল এইচটিএমএল 5-এ যুক্ত হওয়া নতুন নামযুক্ত চরিত্রের রেফারেন্সগুলিকে সমর্থন করে না , তিনি লেখক http://mathias.html5.org/tests/html এ নামকৃত চরিত্রের রেফারেন্স সাপোর্টের একটি পরীক্ষাও করেন / নাম-চরিত্র-রেফারেন্স / । আইই 8 এ এটি এক হাজারেরও বেশি ত্রুটির কথা জানিয়েছে।
আপনি যদি সত্তা ডিকোডিং সম্পর্কিত ব্রাউজার বাগগুলি থেকে নিরোধক হতে চান এবং / অথবা নামযুক্ত চরিত্রের রেফারেন্সগুলির পুরো পরিসরটি পরিচালনা করতে সক্ষম হন তবে আপনি <textarea>হ্যাক দিয়ে দূরে যেতে পারবেন না ; তোমার মত একটি লাইব্রেরি প্রয়োজন হবে সে ।
তিনি কেবল সুন্দরভাবে অনুভব করেন যে জিনিসগুলি এভাবে করা কম হ্যাকি।
সঙ্কেতাক্ষরে লিখা:
$("<textarea/>").html('<a>').html(); // return '<a>'
ডিকোড:
$("<textarea/>").html('<a>').val() // return '<a>'
ব্যবহার
myString = myString.replace( /\&/g, '&' );
সার্ভারের পক্ষে এটি করা সবচেয়ে সহজ কারণ স্পষ্টতই জাভাস্ক্রিপ্টের সত্তা পরিচালনার জন্য কোনও নেটিভ গ্রন্থাগার নেই, এবং জাভা স্ক্রিপ্টকে প্রসারিত বিভিন্ন ফ্রেমওয়ার্কগুলির জন্য অনুসন্ধানের ফলাফলগুলির শীর্ষের কাছাকাছি আমি কোনও খুঁজে পাইনি।
"জাভাস্ক্রিপ্ট এইচটিএমএল সত্তা" সন্ধান করুন এবং আপনি কেবল সেই উদ্দেশ্যে কয়েকটি গ্রন্থাগার পেতে পারেন তবে সেগুলি সম্ভবত উপরের যুক্তির চারপাশে নির্মিত হবে - সত্তার দ্বারা সত্তা প্রতিস্থাপন করুন।
আমার কাছে এইচটিএমএল বোতামের মান হিসাবে একটি এইচটিএমএল সত্তা চরিত্র (⇓) থাকতে হবে। এইচটিএমএল কোডটি ব্রাউজারে শুরু থেকেই ভাল দেখাচ্ছে:
<input type="button" value="Embed & Share ⇓" id="share_button" />
এখন আমি একটি টগল যুক্ত করছি যা চরিত্রটিও প্রদর্শন করা উচিত। এটি আমার সমাধান
$("#share_button").toggle(
function(){
$("#share").slideDown();
$(this).attr("value", "Embed & Share " + $("<div>").html("⇑").text());
}
এটি বোতামে আবার প্রদর্শিত হয়। আমি আশা করি এটি কারও সাহায্য করবে।
"Embed & Share \u21d1"), বা আরও ভাল "Embed & Share ⇑"। একটি জাভাস্ক্রিপ্ট স্ট্রিংয়ের মধ্যে একটি স্বেচ্ছাসেবী ইউনিকোড চরিত্রটিকে বেক করার জন্য এইচটিএমএল সত্ত্বাকে বিশ্লেষণ করার জন্য একটি ডিওএম উপাদান ব্যবহার করা একটি ধূর্ত এবং সৃজনশীল পদ্ধতি যা রুবে গোল্ডবার্গকে গর্বিত করে তুলবে, তবে এটি ভাল অভ্যাস নয়; ইউনিকোড পলায়ন বিশেষত এই ব্যবহারের কেসটি পরিচালনা করার জন্য ভাষায় রয়েছে।
আপনাকে এইচটিএমএল সত্তাগুলির জন্য কাস্টম ফাংশন করতে হবে:
function htmlEntities(str) {
return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g,'>').replace(/"/g, '"');
}
মনে করুন আপনার স্ট্রিংয়ের নীচে আছে।
আমাদের ডিলাক্স কেবিনগুলি উষ্ণ, আরামদায়ক এবং মজাদার; আরামপ্রদ
var str = $("p").text(); // get the text from <p> tag
$('p').html(str).text(); // Now,decode html entities in your variable i.e
আরআরটি এবং ফিরে বরাদ্দ
ট্যাগ।
এটাই.
ExtJS ব্যবহারকারীদের জন্য, আপনার যদি ইতিমধ্যে এনকোডযুক্ত স্ট্রিং থাকে, উদাহরণস্বরূপ যখন কোনও লাইব্রেরি ফাংশনের প্রত্যাবর্তিত মান অভ্যন্তরীণ এইচটিএমএল বিষয়বস্তু হয় তবে এই ExtJS ফাংশনটি বিবেচনা করুন:
Ext.util.Format.htmlDecode(innerHtmlContent)
একটি স্ট্রিং ক্লাস প্রসারিত করুন:
String::decode = ->
$('<textarea />').html(this).text()
এবং পদ্ধতি হিসাবে ব্যবহার করুন:
"<img src='myimage.jpg'>".decode()
এটা চেষ্টা কর :
var htmlEntities = "<script>alert('hello');</script>";
var htmlDecode =$.parseHTML(htmlEntities)[0]['wholeText'];
console.log(htmlDecode);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
পার্সএইচটিএমএল জেকারি লাইব্রেরিতে একটি ফাংশন এবং এটি প্রদত্ত স্ট্রিং সম্পর্কিত কিছু বিবরণ অন্তর্ভুক্ত করে এমন একটি অ্যারে ফিরিয়ে দেবে ..
কিছু ক্ষেত্রে স্ট্রিং বড় হচ্ছে, সুতরাং ফাংশনটি সামগ্রীটিকে অনেক সূচকে আলাদা করে দেবে ..
এবং সমস্ত সূচী ডেটা পেতে আপনার যে কোনও সূচীতে যাওয়া উচিত, তারপরে "পুরো পাঠ্য" নামক সূচীতে অ্যাক্সেস পান।
আমি সূচক 0 বেছে নিয়েছি কারণ এটি সমস্ত ক্ষেত্রে (ছোট স্ট্রিং বা বড় স্ট্রিং) কাজ করবে।
এখানে এখনও একটি সমস্যা রয়েছে: ইনপুট মানকে বরাদ্দ করা হলে এস্কেপড স্ট্রিং পঠনযোগ্য মনে হয় না
var string = _.escape("<img src=fake onerror=alert('boo!')>");
$('input').val(string);
এক্সপামেল: https://jsfiddle.net/kjpdwmqa/3/
escapeঅ্যান্ডসোর.জেএস এর পদ্ধতি ব্যবহার করছেন । এছাড়াও আপনার কোড নমুনা কীভাবে ওপির সমস্যার সমাধান করবে সে সম্পর্কে কোনও ব্যাখ্যা নেই।
বিকল্পভাবে, এটির জন্য একটি লাইব্রেরি রয়েছে ..
এখানে, https://cdnjs.com/libraries/he
npm install he //using node.js
<script src="js/he.js"></script> //or from your javascript directory
ব্যবহারটি নিম্নরূপ ...
//to encode text
he.encode('© Ande & Nonso® Company LImited 2018');
//to decode the
he.decode('© Ande & Nonso® Company Limited 2018');
চিয়ার্স।
এইচটিএমএল সত্তাকে jQuery দিয়ে ডিকোড করতে, কেবল এই ফাংশনটি ব্যবহার করুন:
function html_entity_decode(txt){
var randomID = Math.floor((Math.random()*100000)+1);
$('body').append('<div id="random'+randomID+'"></div>');
$('#random'+randomID).html(txt);
var entity_decoded = $('#random'+randomID).html();
$('#random'+randomID).remove();
return entity_decoded;
}
ব্যবহারবিধি:
javascript:
var txtEncoded = "á é í ó ú";
$('#some-id').val(html_entity_decode(txtEncoded));
এইচটিএমএল:
<input id="some-id" type="text" />
সবচেয়ে সহজ উপায় হ'ল আপনার উপাদানগুলিতে কোনও শ্রেণি নির্বাচককে সেট করার পরে নিম্নলিখিত কোডগুলি ব্যবহার করুন:
$(function(){
$('.classSelector').each(function(a, b){
$(b).html($(b).text());
});
});
আর কিছুই দরকার নেই!
আমি এই সমস্যাটি পেয়েছি এবং এই স্পষ্ট সমাধানটি পেয়েছি এবং এটি দুর্দান্ত কাজ করে।