مشاكل في تمرير الأحرف الخاصة باستخدام Observ_field

StackOverflow https://stackoverflow.com/questions/31312

  •  09-06-2019
  •  | 
  •  

سؤال

أنا أعمل في مشروع القضبان.باستخدام العلامة Observ_field، أقوم بأخذ النص المكتوب في منطقة النص، ومعالجته في عنصر تحكم، وعرض النتيجة في div (يشبه إلى حد كبير المعاينة في تجاوز سعة المكدس).كل شيء يعمل بشكل جيد حتى أكتب بعض الأحرف الخاصة.

  1. ؟=> يتسبب في عدم العثور على المتغير في الكائن params
  2. (جنيه) => يتسبب في حدوث خطأ غير صالح في المصادقة
  3. % => يوقف تحديث div
  4. & => لم يعد يتم تمرير كل شيء بعد & إلى المتغير الموجود على الخادم.

هل هناك طريقة لحل هذه؟

--- نموذج الكود ---

هذا هو الرأي.('postbody' هي منطقة النص)

<%= observe_field 'postbody', 
                    :update => 'preview', 
                    :url => {:controller => 'blog', :action => 'textile_to_html'},
                    :frequency => 0.5,
                    :with => 'postbody' -%>

هذه هي وحدة التحكم التي تسمى

def textile_to_html
    text = params['postbody']
    if text == nil then 
        @textile_to_html = '<br/>never set'
    else 
        r = RedCloth.new text
        @textile_to_html = r.to_html
    end 
    render :layout => false 
end 

وهذا هو جافا سكريبت الذي تم إنشاؤه:

new Form.Element.Observer('postbody', 0.5, function(element, value) {new Ajax.Updater('preview', '/blog/textile_to_html', {asynchronous:true, evalScripts:true, parameters:'postbody=' + value + '&authenticity_token=' + encodeURIComponent('22f7ee12eac9efd418caa0fe76ae9e862025ef97')})})
هل كانت مفيدة؟

المحلول

وهذه مسألة هروب (كما ذكر آخرون).

ستحتاج إلى تغيير عبارة Observe_field :with إلى شيء مثل:

  :with => "'postbody=' + encodeURIComponent(value)"

ثم في وحدة التحكم الخاصة بك:

def textile_to_html
  text = URI.unescape(params['postbody'])
  ...

نصائح أخرى

هل يمكنك تقديم عينة التعليمات البرمجية؟

على الأرجح أنك ستحتاج فقط إلى الهروب من كيانات HTML الخاصة بك باستخدام com.encodeuri أو شيء من هذا القبيل.

كيف تبدو جافا سكريبت التي تم إنشاؤها؟

يبدو (للوهلة الأولى) وكأنه لم يتم الهروب منه.

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