Probleme bei der Übergabe von Sonderzeichen mit „observ_field“.
-
09-06-2019 - |
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.
- ?=> führt dazu, dass die Variable nicht im params-Objekt gefunden wird
- (Pfund) => verursacht einen ungültigen Authentizitätsfehler
- % => verhindert, dass das Div aktualisiert wird
- & => 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')})})
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.