วิธีการถอดรหัสเอนทิตี HTML โดยใช้ jQuery


334

ฉันจะใช้ jQuery เพื่อถอดรหัสเอนทิตี HTML ในสตริงได้อย่างไร


ตัวเลือกก่อนวัยอันควรของเทคโนโลยี (jQuery) เชิญคำตอบเกี่ยวกับปัญหาด้านความปลอดภัย นี้อาจจะดีกว่าปิดเป็นซ้ำของstackoverflow.com/questions/1912501/...
Wladimir Palant

คำตอบ:


437

หมายเหตุด้านความปลอดภัย: การใช้คำตอบนี้ (เก็บรักษาไว้ในรูปแบบดั้งเดิมด้านล่าง) อาจทำให้เกิดช่องโหว่ XSSในแอปพลิเคชันของคุณ คุณไม่ควรใช้คำตอบนี้ อ่านคำตอบของ lucascaroสำหรับคำอธิบายเกี่ยวกับช่องโหว่ในคำตอบนี้และใช้แนวทางจากทั้งคำตอบนั้นหรือคำตอบของMark Ameryแทน

ที่จริงแล้วลอง

var decoded = $("<div/>").html(encodedStr).text();

175
อย่าได้ทำเช่นนี้ด้วยการป้อนข้อมูลที่ไม่น่าเชื่อถือ เบราว์เซอร์จำนวนมากโหลดรูปภาพและสร้างเหตุการณ์ที่เกี่ยวข้องแม้ว่าจะไม่ได้แนบโหนดกับ DOM $("<div/>").html('<img src="http://www.google.com/images/logos/ps_logo2.png" onload=alert(1337)>')ลองใช้ ใน Firefox หรือ Safari ไฟจะแจ้งเตือน
Mike Samuel

@ ไมค์ดังนั้นคุณแนะนำอะไรแทน คำตอบของคุณ. แทนที่ () ไม่ดีถ้าคุณไม่รู้ว่าคุณกำลังจะเปลี่ยน ...
ekkis

7
@ekkis คุณต้องดึงแท็กออกก่อนที่จะพยายามถอดรหัสเอนทิตี str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/g, "")หรือสิ่งที่คล้ายกัน
Mike Samuel

2
การดำเนินที่ดีกว่า (ในความคิดของฉัน) ที่แถบที่สุดแท็ก HTML (มารยาทของไมค์) จากการป้อนข้อมูลที่อยู่ในคำตอบของฉันของคำถามที่คล้ายกัน มันยังไม่มีโอเวอร์เฮดของ jQuery ดังนั้นจึงค่อนข้างเหมาะกับสภาพแวดล้อมอื่น ๆ
Robert K

6
@MichaelStum การแก้ไขของคุณที่นี่ไม่ถูกต้องทั้งความคิดเห็นของ Mike Samuel และคำตอบที่ได้รับการโหวตสูงสุดถัดไปและทำได้โดยไม่แก้ไขช่องโหว่ XSSสำหรับ jQuery ทุกรุ่น (ตามที่อธิบายไว้ในคำตอบด้านล่าง) การเพิ่มคำเตือนความปลอดภัยให้กับคำตอบนี้จะสมเหตุสมผล (และฉันจะทำเช่นนั้น); แสดงการสนทนาอื่น ๆ ในหน้านี้ไร้สาระในขณะที่ไม่สามารถแก้ไขช่องโหว่ความปลอดภัยได้
Mark Amery

211

ไม่มี jQuery:

function decodeEntities(encodedString) {
  var textArea = document.createElement('textarea');
  textArea.innerHTML = encodedString;
  return textArea.value;
}

console.log(decodeEntities('1 &amp; 2')); // '1 & 2'

วิธีนี้ทำงานคล้ายกับคำตอบที่ยอมรับแต่ปลอดภัยที่จะใช้กับอินพุตของผู้ใช้ที่ไม่น่าเชื่อถือ


ปัญหาด้านความปลอดภัยในแนวทางที่คล้ายกัน

ตามที่ระบุไว้โดย Mike Samuelการทำเช่นนี้<div>แทนการ<textarea>ป้อนข้อมูลผู้ใช้ที่ไม่น่าเชื่อถือเป็นช่องโหว่ XSS แม้ว่า<div>จะไม่ได้เพิ่มใน DOM:

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>ที่ได้รับอนุญาตของเนื้อหา ดังนั้นแท็ก HTML ใด ๆ ที่ยังคงอยู่ในสตริง 'เข้ารหัส' จะถูกเข้ารหัสโดยอัตโนมัติโดยเบราว์เซอร์

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>

* ขอขอบคุณEru Penkmanสำหรับการตรวจจับช่องโหว่นี้


6
มันอาจจะเป็นความคิดที่ดีที่จะทำลาย textarea หลังจากการสกัดความคุ้มค่า:decodedString = textArea.value; textArea.remove(); return decodedString;
แวร์เนอร์

2
หรือเฉพาะในกรณีที่เวอร์ชันของ javascript รองรับการลบ ():if ('remove' in Element.prototype) textArea.remove();
เวอร์เนอร์

6
@Werner เร็วที่สุดเท่าที่ฟังก์ชั่นได้ออกจะมีไม่มีตัวแปรอื่น ๆ อีกมากมายถืออ้างอิงถึงมันจึงจะถูกลบออกโดยอัตโนมัติโดยการเก็บขยะ
2428118

ฉันใช้สิ่งนี้ร่วมกับ. NET จากการใช้รหัสหลังการคลิกเพียงปุ่มเดียวและด้วยเหตุผลบางอย่างคำตอบที่ยอมรับได้ทำให้เกิดการ postback คำตอบนี้ไม่ได้ดังนั้นนี่คือคำตอบที่ดีที่สุดสำหรับฉัน ขอบคุณ!
Snailer

@Snailer $("<div />").html(string).text() จะใช้งานจาวาสคริปต์ในสตริงที่มีให้ซึ่งฉันสงสัยว่าเป็นสิ่งที่ทำให้เกิดปัญหาของคุณ คำตอบที่ยอมรับควรได้รับการอัปเดตเป็นคำตอบนี้
jbowman

80

เช่นเดียวกับ Mike Samuel กล่าวว่าอย่าใช้ jQuery.html (). text () เพื่อถอดรหัสเอนทิตี html เนื่องจากไม่ปลอดภัย

ให้ใช้เทมเพลตเท็มเพลตเช่นMustache.jsหรือdecodeEntitiesจากความคิดเห็นของ @ VyvIT แทน

ไลบรารียูทิลิตี้เข็มขัดUnderscore.jsมาพร้อมกับescapeและunescapeวิธีการ แต่ไม่ปลอดภัยสำหรับการป้อนข้อมูลของผู้ใช้:

_.escape (สตริง)

_.unescape (สตริง)


2
จริง ๆ แล้วสมควรได้รับ upvotes มากกว่านี้! แน่นอนทางออกที่ฉันต้องการ พวกเขารวมอยู่unescapeในเอกสารตอนนี้ btw
กีตาร์ที่มีความร้ายแรง

5
_.unescape("&#39;")ผลลัพธ์ในเพียง "& # 39;" แทนคำพูดเดียว มีบางสิ่งที่ฉันขาดหายไปหรือขีดเส้นใต้ไม่หลบหนีไปยังรหัสเอนทิตี HTML ดังที่แสดงใน: w3schools.com/tags/ref_entities.asp
Jason Axelson

6
ข้อผิดพลาดใน github ถูกปิดเป็น "จะไม่แก้ไข"; นั่นหมายความว่าโซลูชันนี้ใช้ไม่ได้และจะไม่ทำงาน
Igor Chubin

3
คุณบอกว่าเน้นของ" escapeและunescapeวิธีการ ... จะไม่ปลอดภัยสำหรับการป้อนข้อมูลผู้ใช้" คุณหมายถึงอะไร? ฟังดูไร้สาระสำหรับฉัน แต่บางทีฉันอาจขาดอะไรไปหน่อยคุณช่วยอธิบายได้ไหม?
Mark Amery

2
@VyvIT พยายามแล้ว_.unescape("&lt;img src=fake onerror=alert('boo!')&gt;")(ใน Chrome / FF / IE) แต่มันไม่ได้แสดงการแจ้งเตือนใด ๆ พยายามในคอนโซลรวมทั้งวางไว้ในไฟล์ JS ของฉันด้วย ผลลัพธ์เดียวกัน
Vivek Athalye

28

ฉันคิดว่าคุณสับสนกับวิธีข้อความและ HTML ดูตัวอย่างนี้หากคุณใช้ HTML ภายในขององค์ประกอบเป็นข้อความคุณจะได้รับการถอดรหัสแท็ก HTML (ปุ่มที่สอง) แต่ถ้าคุณใช้เป็น HTML คุณจะได้รับมุมมองการจัดรูปแบบ HTML (ปุ่มแรก)

<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());" />
&nbsp;&nbsp;
<input value="Write as Text" type="button" onclick="javascript:$('#resultDiv').text($('#myDiv').html());" />
<br /><br />
<div id="resultDiv">
    Results here !
</div>

ปุ่มแรกเขียน:นี่คือเนื้อหาHTML

ปุ่มที่สองเขียน:นี่คือเนื้อหา <B> HTML </B>

อย่างไรก็ตามคุณสามารถเห็นปลั๊กอินที่ฉันพบในปลั๊กอิน jQuery - ถอดรหัส HTML และเข้ารหัสที่เข้ารหัสและถอดรหัสสตริง HTML


26

คำถามถูก จำกัด โดย 'with jQuery' แต่มันอาจช่วยให้บางคนรู้ว่ารหัส jQuery ที่ให้ไว้ในคำตอบที่ดีที่สุดที่นี่ทำสิ่งต่อไปนี้ภายใต้ ... การทำงานนี้มีหรือไม่มี jQuery:

function decodeEntities(input) {
  var y = document.createElement('textarea');
  y.innerHTML = input;
  return y.value;
}

20

คุณสามารถใช้ไลบรารีheได้จากhttps://github.com/mathiasbynens/he

ตัวอย่าง:

console.log(he.decode("J&#246;rg &amp J&#xFC;rgen rocked to &amp; fro "));
// Logs "Jörg & Jürgen rocked to & fro"

ฉันท้าทายผู้เขียนของห้องสมุดเกี่ยวกับคำถามที่ว่ามีเหตุผลใดที่จะใช้ห้องสมุดนี้ในรหัสของลูกค้าเพื่อสนับสนุนการ<textarea>แฮ็คที่ให้ไว้ในคำตอบอื่น ๆที่นี่และที่อื่น ๆ เขาให้เหตุผลที่เป็นไปได้สองสามข้อ:

  • หากคุณกำลังใช้ node.js serverside การใช้ไลบรารี่สำหรับการเข้ารหัส / ถอดรหัส HTML จะช่วยให้คุณมีโซลูชั่นเดียวที่ทำงานทั้งฝั่งไคลเอนต์และฝั่งเซิร์ฟเวอร์

  • บางเบราว์เซอร์นิติบุคคลถอดรหัสอัลกอริทึมมีข้อบกพร่องหรือขาดหายไปสนับสนุนสำหรับบางอ้างอิงตัวละครชื่อ ตัวอย่างเช่น Internet Explorer จะถอดรหัสและแสดงช่องว่างแบบไม่แตกหัก ( &nbsp;) ได้อย่างถูกต้อง แต่รายงานว่าเป็นช่องว่างทั่วไปแทนที่จะเป็นช่องว่างแบบไม่ทำลายผ่านinnerTextคุณสมบัติขององค์ประกอบ DOM ทำให้<textarea>แฮ็ค (แม้จะเป็นเพียงเล็กน้อย) นอกจากนี้ IE 8 และ 9 ก็ไม่สนับสนุนการอ้างอิงอักขระที่มีชื่อใหม่ที่เพิ่มใน HTML 5 ผู้เขียนของเขายังโฮสต์ทดสอบการสนับสนุนการอ้างอิงอักขระที่ชื่อที่http://mathias.html5.org/tests/html / ชื่อตัวอักษรอ้างอิง / ใน IE 8 จะรายงานข้อผิดพลาดมากกว่าหนึ่งพันข้อ

    หากคุณต้องการได้รับการป้องกันจากข้อบกพร่องของเบราว์เซอร์ที่เกี่ยวข้องกับการถอดรหัสเอนทิตีและ / หรือสามารถจัดการการอ้างอิงอักขระที่มีชื่อเต็มรูปแบบได้คุณจะไม่สามารถ<textarea>แฮ็คได้ คุณจะต้องห้องสมุดเหมือนเขา

  • เขาแค่ยี้รู้สึกดีที่ทำสิ่งนี้ด้วยวิธีที่ไม่สมบูรณ์


4
+1 jQuery ไม่ใช่คำตอบสำหรับทุกสิ่ง ใช้เครื่องมือที่เหมาะสมสำหรับงาน
Mathias Bynens

นี่เป็นวิธีที่ดีที่สุดในการถอดรหัสเอนทิตี HTML คำตอบอื่น ๆ ทั้งหมด (ในคำถามนี้และคำถามที่คล้ายกัน) อาจใช้ InnerHTML (สร้างองค์ประกอบ HTML ใหม่ประมวลผลโค้ด HTML และรับ InnerHTML ขององค์ประกอบนั้นซึ่งอาจเสี่ยงต่อการโจมตี XSS หากคุณไม่ระวังมากดูเพิ่มเติม ) หรือพวกเขา ขอแนะนำให้ใช้วิธี Underscore.js unescapeหรือ Lodash unescapeซึ่งทั้งสองอย่างนี้ไม่สมบูรณ์ (ใช้ได้กับเอนทิตี HTML บางแห่งเท่านั้น) ห้องสมุดเขาสมบูรณ์และปลอดภัยที่สุด!
ands

18

เข้ารหัส:

$("<textarea/>").html('<a>').html();      // return '&lt;a&gt'

ถอดรหัส:

$("<textarea/>").html('&lt;a&gt').val()   // return '<a>'

3
มีคำตอบที่ใช้งานได้และเกือบจะเหมือนกันกับสิ่งนี้ เราไม่ต้องการคำตอบที่ซ้ำกัน
markasoftware

4
นี่คือคำตอบที่ถูกต้อง คำตอบของทอมใช้องค์ประกอบ DIV ซึ่งทำให้คำตอบนั้นมีความเสี่ยงต่อ XSS
Francisco Hodge

2
นี่คือคำตอบที่ดีที่สุดสำหรับความชัดเจน
Dan Randolph

4

ใช้

myString = myString.replace( /\&amp;/g, '&' );

มันง่ายที่สุดที่จะทำบนฝั่งเซิร์ฟเวอร์เพราะเห็นได้ชัดว่า JavaScript ไม่มีไลบรารี่ดั้งเดิมสำหรับการจัดการเอนทิตีและฉันไม่พบสิ่งใดใกล้กับด้านบนของผลการค้นหาสำหรับเฟรมเวิร์กต่าง ๆ ที่ขยายจาวาสคริปต์

ค้นหา "เอนทิตี HTML JavaScript" และคุณอาจพบว่ามีไลบรารี่บางอันสำหรับจุดประสงค์นั้น แต่พวกมันอาจจะถูกสร้างขึ้นรอบ ๆ ตรรกะด้านบน - แทนที่เอนทิตี้ของเอนทิตี


0

ฉันแค่ต้องมีนิติบุคคล HTML (⇓) เป็นค่าสำหรับปุ่ม HTML รหัส HTML ดูดีตั้งแต่เริ่มต้นในเบราว์เซอร์:

<input type="button" value="Embed & Share  &dArr;" id="share_button" />

ตอนนี้ฉันได้เพิ่มการสลับที่ควรแสดงตัวละคร นี่คือทางออกของฉัน

$("#share_button").toggle(
    function(){
        $("#share").slideDown();
        $(this).attr("value", "Embed & Share " + $("<div>").html("&uArr;").text());
    }

จะแสดง⇓อีกครั้งในปุ่ม ฉันหวังว่าสิ่งนี้อาจช่วยให้ใครบางคน


ความเรียบง่ายจะใช้ลำดับการหลบหนีแบบ Unicode (เช่น"Embed & Share \u21d1") หรือดีกว่า แต่"Embed & Share ⇑"ถ้าคุณสามารถให้บริการสคริปต์ของคุณใน UTF-8 (หรือ UTF-16 หรือการเข้ารหัสอื่น ๆ ที่สนับสนุนอักขระ)) การใช้องค์ประกอบ DOM เพื่อแยกเอนทิตี HTML เพียงเพื่ออบอักขระยูนิโคดลงในสตริง JavaScript เป็นวิธีที่ชาญฉลาดและสร้างสรรค์ที่จะทำให้ Rube Goldberg ภูมิใจ แต่ไม่ใช่วิธีปฏิบัติที่ดี unicode escapes เป็นภาษาที่ใช้จัดการกรณีการใช้งานนี้โดยเฉพาะ
Mark Amery

0

คุณต้องสร้างฟังก์ชันที่กำหนดเองสำหรับเอนทิตี html:

function htmlEntities(str) {
return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g,'&gt;').replace(/"/g, '&quot;');
}

ฉันไม่มีความคิดมันช่วยฉันได้ +1 l-)
Szymon Toda

อาจเป็นเพราะมีการจัดการบางหน่วยงานเท่านั้น
Jasen

คำถามเดิมคือวิธีการถอดรหัสเอนทิตี - สิ่งนี้ตรงกันข้ามกับสิ่งที่ต้องการ; มันเข้ารหัสชุดอักขระที่ จำกัด อย่างมากในเอนทิตี ดังที่คำแนะนำในเครื่องมือโหวตโหวตบอกว่า "คำตอบนี้ไม่มีประโยชน์" ฉันประหลาดใจที่หลังจาก 4 ปีมันยังคงมีคะแนนเป็นบวก
สตีเฟ่น P

0

สมมติว่าคุณมีสตริงด้านล่าง

เคบินดีลักซ์ของเราอบอุ่นอบอุ่นเป็นกันเอง & amp; สบาย

var str = $("p").text(); // get the text from <p> tag
$('p').html(str).text();  // Now,decode html entities in your variable i.e 

str และกำหนดกลับไปที่

แท็ก

แค่นั้นแหละ.


0

สำหรับผู้ใช้ ExtJS หากคุณมีสตริงที่เข้ารหัสแล้วเช่นเมื่อค่าที่ส่งคืนของฟังก์ชันไลบรารีคือเนื้อหา InnerHTML ให้พิจารณาฟังก์ชัน ExtJS นี้:

Ext.util.Format.htmlDecode(innerHtmlContent)

สิ่งนี้จะทำงานสำหรับเอนทิตี HTML 5 รายการเท่านั้น คุณสามารถดูนี้ในเอกสารและรหัสแหล่งที่มา
ands


0

ลองสิ่งนี้:

var htmlEntities = "&lt;script&gt;alert('hello');&lt;/script&gt;";
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>

parseHTMLเป็นฟังก์ชั่นในห้องสมุด Jquery และมันจะกลับอาร์เรย์ที่มีรายละเอียดบางอย่างเกี่ยวกับสตริงที่กำหนด ..

ในบางกรณี String มีขนาดใหญ่ดังนั้นฟังก์ชันจะแยกเนื้อหาออกเป็นดัชนีหลาย ๆ

และเพื่อรับข้อมูลดัชนีทั้งหมดคุณควรไปที่ดัชนีใด ๆ จากนั้นเข้าถึงดัชนีที่เรียกว่า "wholeText"

ฉันเลือกดัชนี 0 เพราะมันจะใช้ได้ในทุกกรณี (สตริงเล็กหรือสตริงใหญ่)


ในขณะที่ข้อมูลโค้ดนี้อาจเป็นโซลูชันรวมถึงคำอธิบายช่วยปรับปรุงคุณภาพของโพสต์ของคุณ จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและคนเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำรหัสของคุณ
Johan

เพิ่มคำอธิบายแล้ว ... ขอบคุณ :)
Fawaz Al Romy

-1

นี่ยังคงเป็นปัญหาหนึ่ง: สตริงที่ใช้ Escape ไม่สามารถอ่านได้เมื่อกำหนดให้กับค่าอินพุต

var string = _.escape("<img src=fake onerror=alert('boo!')>");
$('input').val(string);

Exapmle: https://jsfiddle.net/kjpdwmqa/3/


นี่ไม่ใช่คำตอบสำหรับคำถาม OP ขอให้ถอดรหัสเอนทิตี HTML (unescape) HTML แต่ในคำตอบนี้คุณกำลังใช้escapeวิธี Underscore.js ยังไม่มีคำอธิบายว่าตัวอย่างโค้ดของคุณควรแก้ปัญหา OP อย่างไร
ands

-1

นอกจากนี้ยังมีห้องสมุดสำหรับ ..

ที่นี่https://cdnjs.com/l ไลบรารี/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('&copy; Ande &amp; Nonso&reg; Company Limited 2018');

ไชโย


มีคำตอบเกี่ยวกับไลบรารี่ของเขาที่สมบูรณ์พร้อมด้วยตัวอย่างรหัสง่ายๆและคำอธิบายที่ดีว่าทำไมและเมื่อใดที่คุณควรใช้ไลบรารี่ของเขา
ands

-3

หากต้องการถอดรหัสเอนทิตี HTML ด้วย 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 = "&aacute; &eacute; &iacute; &oacute; &uacute;";
$('#some-id').val(html_entity_decode(txtEncoded));

HTML:

<input id="some-id" type="text" />

-3

วิธีที่ง่ายที่สุดคือตั้งตัวเลือกคลาสให้องค์ประกอบของคุณแล้วใช้รหัสต่อไปนี้:

$(function(){
    $('.classSelector').each(function(a, b){
        $(b).html($(b).text());
    });
});

ไม่มีอะไรจำเป็นอีกแล้ว!

ฉันมีปัญหานี้และพบวิธีแก้ปัญหาที่ชัดเจนและใช้งานได้ดี


นี่ไม่ใช่คำตอบสำหรับคำถามของ OP OP ขอให้ถอดรหัสเอนทิตี HTML ใน STRING ไม่เพียง แต่จะไม่สามารถแก้ปัญหาของ OP แต่ยังจะแทนที่เอนทิตี HTML ที่หลบหนีในองค์ประกอบ HTML ด้วยสิ่งที่ไม่คาดคิดซึ่งไม่ควรทำ
ands

-3

ฉันคิดว่านั่นเป็นสิ่งที่ตรงกันข้ามกับวิธีการแก้ปัญหาที่เลือก

var decoded = $("<div/>").text(encodedStr).html();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.