Проблемы с передачей специальных символов с наблюдением - PullRequest
1 голос
/ 28 августа 2008

Я работаю над проектом рельсов. Используя тег наблюдаемое поле, я беру текст, введенный в текстовую область, обрабатываю его в элементе управления и отображаю результат в 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 

и это созданный 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')})})

Ответы [ 3 ]

3 голосов
/ 13 ноября 2008

Это проблема с выходом (как утверждают другие).

Вы захотите изменить поле наблюдения: с утверждением на что-то вроде:

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

Тогда в вашем контроллере:

def textile_to_html
  text = URI.unescape(params['postbody'])
  ...
0 голосов
/ 01 сентября 2008

Как выглядит сгенерированный Javascript?

Звучит (на первый взгляд), как будто это не сбежит.

0 голосов
/ 28 августа 2008

Можете ли вы предоставить пример кода?

Скорее всего, вам просто нужно будет экранировать свои HTML-объекты, используя encodeuri или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...