كيفية HTML تشفير / الهروب من سلسلة؟ هناك المدمج في؟
-
22-08-2019 - |
سؤال
ولدي سلسلة غير موثوق بها التي أريد أن تظهر كنص في صفحة HTML. أنا بحاجة للهروب من حرف "<
" و "&
" ككيانات HTML. وأقل ضجة كلما كان ذلك أفضل.
وأنا باستخدام UTF8 ولا تحتاج الكيانات الأخرى للرسائل معلمة.
هل هناك وظيفة المضمنة في روبي أو القضبان، أو ينبغي أن القوائم الخاصة بي؟
المحلول
وطريقة h
المساعد:
<%=h "<p> will be preserved" %>
نصائح أخرى
وتحقيقنا فئة روبي CGI . هناك طرق لترميز HTML وفك وكذلك عناوين المواقع.
CGI::escapeHTML('Usage: foo "bar" <baz>')
# => "Usage: foo "bar" <baz>"
في روبي على القضبان 3 سيتم هرب HTML افتراضيا.
لاستخدام سلاسل غير هرب:
<%= raw "<p>hello world!</p>" %>
ERB :: Util.html_escape يمكن أن يكون استخدامها في أي مكان. كان متوفرا دون استخدام require
في القضبان.
وهناك بالإضافة إلى الإجابة كريستوفر برادفورد لاستخدام HTML يهرب في أي مكان،
لأن معظم الناس لا يستخدمون CGI
في الوقت الحاضر، يمكنك أيضا استخدام Rack
:
require 'rack/utils'
Rack::Utils.escape_html('Usage: foo "bar" <baz>')
ويمكنك استخدام إما h()
أو html_escape()
، ولكن معظم الناس يستخدمون h()
من الاتفاقية. h()
قصيرة لhtml_escape()
في القضبان.
في جهاز تحكم:
@stuff = "<b>Hello World!</b>"
في وجهة نظركم:
<%=h @stuff %>
إذا عرض مصدر HTML: سترى إخراج الواقع دون البنط الأسود البيانات. بمعنى آخر. يتم ترميز أنها <b>Hello World!</b>
.
وسوف تظهر للظهور على أنها <b>Hello World!</b>
وكومباريسون من الطرق المختلفة:
> CGI::escapeHTML("quote ' double quotes \"")
=> "quote ' double quotes ""
> Rack::Utils.escape_html("quote ' double quotes \"")
=> "quote ' double quotes ""
> ERB::Util.html_escape("quote ' double quotes \"")
=> "quote ' double quotes ""
وكتبت بلدي لتكون متوافقة مع القضبان ActiveMailer الهروب:
def escape_html(str)
CGI.escapeHTML(str).gsub("'", "'")
end
وh()
مفيد أيضا للهروب العملات.
وعلى سبيل المثال، لدي وجهة نظر أن يولد الارتباط باستخدام result[r].thtitle
حقل النص. ويمكن أن تشمل النص علامات الاقتباس المفردة. إذا أنا لم يهرب result[r].thtitle
في طريقة تأكيد، فإن جافا سكريبت كسر:
<%= link_to_remote "#{result[r].thtitle}", :url=>{ :controller=>:resource,
:action =>:delete_resourced,
:id => result[r].id,
:th => thread,
:html =>{:title=> "<= Remove"},
:confirm => h("#{result[r].thtitle} will be removed"),
:method => :delete %>
<a href="#" onclick="if (confirm('docs: add column &apos;dummy&apos; will be removed')) { new Ajax.Request('/resource/delete_resourced/837?owner=386&th=511', {asynchronous:true, evalScripts:true, method:'delete', parameters:'authenticity_token=' + encodeURIComponent('ou812')}); }; return false;" title="<= Remove">docs: add column 'dummy'</a>
ملحوظة: إعلان لقب :html
وهرب سحرية من القضبان