Проблемы с передачей специальных символов с помощью observe_field
-
09-06-2019 - |
Вопрос
Я работаю над проектом rails.Используя тег observe_field , я беру текст, введенный в текстовую область, обрабатываю его в элементе управления и отображаю результат в div (очень похоже на предварительный просмотр в stack overflow).Все работает нормально, пока я не введу определенные специальные символы.
- ?=> приводит к тому, что переменная не найдена в объекте params
- (фунт) => вызывает недопустимую ошибку аутентификации
- % => останавливает обновление div
- & => все, что следует за &, больше не передается в переменную на сервере.
Есть ли способ решить эту проблему?
--- пример кода ---
это и есть точка зрения.( '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
и это созданный javascript:
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-объекты, используя encodeuri кодировать или что-то в этом роде.
Как выглядит сгенерированный Javascript?
Звучит (на первый взгляд) так, будто от этого никуда не деться.