ruby on rails - कच्चे बनाम html_safe बनाम एच unescape एचटीएमएल




ruby-on-rails erb (4)

  1. html_safe :

    विश्वसनीय स्ट्रिंग के रूप में एक स्ट्रिंग को चिह्नित करता है। इसे एचटीएमएल में डाला जाएगा जिसमें कोई अतिरिक्त एस्केपिंग नहीं किया जाएगा।

    "<a>Hello</a>".html_safe
    #=> "<a>Hello</a>"
    
    nil.html_safe
    #=> NoMethodError: undefined method `html_safe' for nil:NilClass
    
  2. raw :

    raw है html_safe आसपास सिर्फ एक रैपर है। अगर स्ट्रिंग की संभावना है तो raw उपयोग करें।

    raw("<a>Hello</a>")
    #=> "<a>Hello</a>"
    
    raw(nil)
    #=> ""
    
  3. html_escape लिए h उपनाम:

    HTML टैग वर्णों से बचने के लिए एक उपयोगिता विधि। किसी भी असुरक्षित सामग्री से बचने के लिए इस विधि का प्रयोग करें।

    रेल 3 और उससे ऊपर में इसका उपयोग डिफ़ॉल्ट रूप से किया जाता है, इसलिए आपको इस विधि का स्पष्ट रूप से उपयोग करने की आवश्यकता नहीं है

मान लीजिए मेरे पास निम्न स्ट्रिंग है

@x = "<a href='#'>Turn me into a link</a>"

मेरे विचार में, मैं एक लिंक प्रदर्शित करना चाहता हूं। यही है, मैं नहीं चाहता कि @x में सब कुछ अनचाहे हो और स्ट्रिंग के रूप में प्रदर्शित हो। उपयोग के बीच क्या अंतर है

<%= raw @x %>
<%= h @x %>
<%= @x.html_safe %>

?


अंतर रेल के html_safe() और raw() । इस पर येहुदा काट्ज़ द्वारा एक उत्कृष्ट पोस्ट है, और यह वास्तव में इसके लिए उबलता है:

def raw(stringish)

  stringish.to_s.html_safe

end

हां, raw() html_safe() चारों ओर एक रैपर है जो इनपुट को स्ट्रिंग में मजबूर करता है और उसके बाद html_safe() को कॉल करता है। यह भी मामला है कि raw() मॉड्यूल में एक सहायक है जबकि html_safe() स्ट्रिंग क्लास पर एक विधि है जो एक नया ActiveSupport :: SafeBuffer उदाहरण बनाता है - जिसमें इसमें @dirty झंडा है।

" रेल" html_safe बनाम कच्चे का संदर्भ लें "।


रेल 3 को ध्यान में रखते हुए:

html_safe वास्तव में "स्ट्रिंग सेट करता है" HTML सुरक्षित के रूप में (यह उससे थोड़ा अधिक जटिल है, लेकिन यह मूल रूप से यह है)। इस तरह, आप इच्छानुसार मददगार या मॉडल से एचटीएमएल सेफ स्ट्रिंग वापस कर सकते हैं।

h केवल नियंत्रक या दृश्य के भीतर से उपयोग किया जा सकता है, क्योंकि यह एक सहायक से है। यह उत्पादन से बचने के लिए मजबूर करेगा। यह वास्तव में बहिष्कृत नहीं है, लेकिन आप अधिकतर इसका उपयोग नहीं करेंगे: एकमात्र उपयोग एक html_safe घोषणा को "वापस" करना है, जो html_safe असामान्य है।

raw साथ अपनी अभिव्यक्ति raw करना वास्तव में html_safe के साथ जंजीर को कॉल करने के बराबर है, लेकिन h तरह ही एक सहायक पर घोषित किया जाता है, इसलिए इसे केवल नियंत्रकों और विचारों पर ही उपयोग किया जा सकता है।

" सेफबफर एंड रेल्स 3.0 " एक सुरक्षित स्पष्टीकरण है कि कैसे SafeBuffer एस ( SafeBuffer जो SafeBuffer जादू करता है) काम करता है।


सबसे अच्छा सुरक्षित तरीका है: <%= sanitize @x %>

यह एक्सएसएस से बच जाएगा!





erb