سؤال

ولدي سلسلة غير موثوق بها التي أريد أن تظهر كنص في صفحة HTML. أنا بحاجة للهروب من حرف "<" و "&" ككيانات HTML. وأقل ضجة كلما كان ذلك أفضل.

وأنا باستخدام UTF8 ولا تحتاج الكيانات الأخرى للرسائل معلمة.

هل هناك وظيفة المضمنة في روبي أو القضبان، أو ينبغي أن القوائم الخاصة بي؟

هل كانت مفيدة؟

المحلول

وطريقة h المساعد:

<%=h "<p> will be preserved" %>

نصائح أخرى

وتحقيقنا فئة روبي CGI . هناك طرق لترميز HTML وفك وكذلك عناوين المواقع.

CGI::escapeHTML('Usage: foo "bar" <baz>')
# => "Usage: foo &quot;bar&quot; &lt;baz&gt;"

في روبي على القضبان 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: سترى إخراج الواقع دون البنط الأسود البيانات. بمعنى آخر. يتم ترميز أنها &lt;b&gt;Hello World!&lt;/b&gt;.

وسوف تظهر للظهور على أنها <b>Hello World!</b>

وكومباريسون من الطرق المختلفة:

> CGI::escapeHTML("quote ' double quotes \"")
=> "quote &#39; double quotes &quot;"

> Rack::Utils.escape_html("quote ' double quotes \"")
=> "quote &#x27; double quotes &quot;"

> ERB::Util.html_escape("quote ' double quotes \"")
=> "quote &#39; double quotes &quot;"

وكتبت بلدي لتكون متوافقة مع القضبان ActiveMailer الهروب:

def escape_html(str)
  CGI.escapeHTML(str).gsub("&#39;", "'")
end

وh() مفيد أيضا للهروب العملات.

وعلى سبيل المثال، لدي وجهة نظر أن يولد الارتباط باستخدام result[r].thtitle حقل النص. ويمكن أن تشمل النص علامات الاقتباس المفردة. إذا أنا لم يهرب result[r].thtitle في طريقة تأكيد، فإن جافا سكريبت كسر:

&lt;%= 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 %>

&lt;a href="#" onclick="if (confirm('docs: add column &amp;apos;dummy&amp;apos; will be removed')) { new Ajax.Request('/resource/delete_resourced/837?owner=386&amp;th=511', {asynchronous:true, evalScripts:true, method:'delete', parameters:'authenticity_token=' + encodeURIComponent('ou812')}); }; return false;" title="&lt;= Remove">docs: add column 'dummy'</a>

ملحوظة: إعلان لقب :html وهرب سحرية من القضبان

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top