ฉันพยายามที่จะถอดรหัสหน่วยงาน HTML บางอย่างเช่นการเป็น'<'
'<'
ฉันมีอัญมณีเก่าแก่ ( html_helpers ) แต่ดูเหมือนว่ามันจะถูกละทิ้ง
คำแนะนำใด ๆ ฉันจะต้องใช้มันในแบบจำลอง
ฉันพยายามที่จะถอดรหัสหน่วยงาน HTML บางอย่างเช่นการเป็น'&lt;'
'<'
ฉันมีอัญมณีเก่าแก่ ( html_helpers ) แต่ดูเหมือนว่ามันจะถูกละทิ้ง
คำแนะนำใด ๆ ฉันจะต้องใช้มันในแบบจำลอง
คำตอบ:
HTMLEntitiesสามารถทำได้:
: jmglov@laurana; sudo gem install htmlentities
Successfully installed htmlentities-4.2.4
: jmglov@laurana; irb
irb(main):001:0> require 'htmlentities'
=> []
irb(main):002:0> HTMLEntities.new.decode "¡I'm highly annoyed with character references!"
=> "¡I'm highly annoyed with character references!"
HTMLEntities
พลอยเกี่ยวข้องกับคดีเช่นå
และ—
ที่CGI.unescapeHTML
ไม่
หากต้องการเข้ารหัสอักขระคุณสามารถใช้CGI.escapeHTML
:
string = CGI.escapeHTML('test "escaping" <characters>')
เพื่อถอดรหัสพวกเขามีCGI.unescapeHTML
:
CGI.unescapeHTML("test "unescaping" <characters>")
แน่นอนว่าก่อนหน้านี้คุณต้องรวมไลบรารี CGI:
require 'cgi'
และถ้าคุณอยู่ใน Rails คุณไม่จำเป็นต้องใช้ CGI เพื่อเข้ารหัสสตริง มีh
วิธีการคือ
<%= h 'escaping <html>' %>
ฉันคิดว่าอัญมณี Nokogiriเป็นทางเลือกที่ดีเช่นกัน มันมีเสถียรภาพมากและมีชุมชนที่ให้ความช่วยเหลือเป็นอย่างมาก
ตัวอย่าง:
a = Nokogiri::HTML.parse "foo bär"
a.text
=> "foo bär"
หรือ
a = Nokogiri::HTML.parse "¡I'm highly annoyed with character references!"
a.text
=> "¡I'm highly annoyed with character references!"
CGI.escapeHTML
อาจจะไม่สามารถแก้ไขบางกรณี ในทางกลับกันหากคุณต้องการการสนับสนุนอย่างเต็มที่ฉันมั่นใจว่าNokogiri
เป็นตัวเลือกที่ดี
CGI::escapeHTML
ไม่รอดพ้นตัวละครเยอรมันเช่นäöüßและอาจจะมากกว่านั้น ... กับ Nokogiri ฉันยังไม่ได้ตรวจสอบ แต่นี่จะเป็นจุดบวก
ในการถอดรหัสอักขระใน Rails ให้ใช้:
<%= raw '<html>' %>
ดังนั้น,
<%= raw '<br>' %>
จะส่งออก
<br>
#raw
ไม่ได้ถอดรหัสอะไรเลย มันบอกมุมมองที่จะไม่เข้ารหัสสตริง มันทำได้โดยการตัดสตริงใน a ActiveSupport::SafeBuffer
ซึ่งจะมีค่าสถานะ ( html_safe?
) ตั้งค่าเป็นจริง มุมมองใช้การตั้งค่าสถานะนี้เพื่อตรวจสอบว่าสายอักขระสามารถถูกฉีดเข้าไปใน HTML โดยตรงโดยไม่ถูก Escape ฉันชอบคิดว่าhtml_safe
เป็นข้อบ่งชี้ของโปรแกรมเมอร์ว่าสตริงที่เป็นปัญหาได้ถูกหลบหนีอย่างเหมาะสมแล้ว
หากคุณไม่ต้องการที่จะเพิ่มการพึ่งพาใหม่เพียงเพื่อทำสิ่งนี้ (เช่นHTMLEntities
) และคุณใช้อยู่แล้วHpricot
มันสามารถหลบหนีและไม่ได้ทิวทัศน์สำหรับคุณ มันจัดการได้มากกว่าCGI
:
Hpricot.uxs "foo bär"
=> "foo bär"
คุณสามารถใช้htmlascii
อัญมณี:
Htmlascii.convert string
<% str="<h1> Test </h1>" %>
result: < h1 > Test < /h1 >
<%= CGI.unescapeHTML(str).html_safe %>