Frage

Ich arbeite an einem Schienenprojekt.Mithilfe des Tags „observ_field“ übernehme ich in einen Textbereich eingegebenen Text, verarbeite ihn in einem Steuerelement und zeige das Ergebnis in einem div an (sehr ähnlich der Vorschau im Stapelüberlauf).Alles funktioniert einwandfrei, bis ich bestimmte Sonderzeichen eingebe.

  1. ?=> führt dazu, dass die Variable nicht im params-Objekt gefunden wird
  2. (Pfund) => verursacht einen ungültigen Authentizitätsfehler
  3. % => verhindert, dass das Div aktualisiert wird
  4. & => alles nach dem & wird nicht mehr in die Variable auf dem Server übergeben.

Gibt es eine Möglichkeit, das zu lösen?

--- Codebeispiel ---

Das ist die Ansicht.('postbody' ist ein Textbereich)

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

Dies ist der Controller, der aufgerufen wird

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 

und das ist das Javascript, das erstellt wird:

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')})})
War es hilfreich?

Lösung

Dies ist ein Fluchtproblem (wie von anderen angegeben).

Sie möchten Ihre „observ_field :with“-Anweisung in etwas wie Folgendes ändern:

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

Dann in Ihrem Controller:

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

Andere Tipps

Können Sie ein Codebeispiel bereitstellen?

Höchstwahrscheinlich müssen Sie Ihre HTML-Entitäten nur mit Escapezeichen versehen Encoder oder etwas ähnliches.

Wie sieht das generierte Javascript aus?

Klingt (auf den ersten Blick) so, als würde man ihm nicht entkommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top