Символ табуляции, вызывающий сбой компонента ajax coldfusion, 500 Internal Server Error

У меня есть форма, которую пользователи будут копировать и вставлять текст из слова документа. Этот контент может содержать символ табуляции. Функция щелчка обрабатывает отправку формы, используя ajax-вызов JSMX для удаленной функции coldfusion. Форма передается через Ajax-вызов компонента.

<form name="test">
<textarea name="swPurpose"></textarea>
<input type="button" value=" Go " onclick="goForm(this.form);" />
</form>

function goForm(f){
var param=f; 
http('POST','testCFC.cfc?method=test',goForm_RTN,param);
}

<cfcomponent output="false">
<cffunction name="test" access="remote" output="false">
<cfset rtn=structNew()/>
<cfsavecontent variable="rtn.html">
<cfoutput><p>#form.swPurpose#</p></cfoutput>
</cfsavecontent>
<cfreturn rtn />
</cffunction>
</cfcomponent>

Это работает очень хорошо, если только символ табуляции не находится в содержании формы. Если вкладка в содержании, я получаю 500 Внутренняя ошибка сервера.

Это образец текста, представленный в форме.

1 Это текст
2 Это текст
3 Это текст

Это закодированный текст из Firebug, который публикуется в функции.

swPurpose = 1% 9This% 20is% 20text% 0A2%9This%20is%20text%0A3%9This%20is%20text& БТН =%20OnClick%20% 20%20Submit

Используя Firebug, я вижу, что контент, отправленный в функцию, закодирован. Вкладки% 9. Я могу поместить cfc в действие формы, и функция не перестанет работать.

Мой обходной путь - удалить вкладки с помощью javascript перед отправкой в ​​функцию. Тем не менее, я хотел бы понять, почему вкладка вызывает ошибку 500 и есть ли что-то, что можно сделать, чтобы предотвратить это.

2 ответа

Попробуйте этот код:

function goForm(f){
    var param = escape(f);//Or also encodeURI(f) or even encodeURIComponent(f)
    http('POST','testCFC.cfc?method=test',goForm_RTN,param);
}

Вы можете заменить вкладки простым регулярным выражением в коде CF перед возвратом.

<cfcomponent output="false">
    <cffunction name="test" access="remote" output="false">
        <cfargument name="form">
        <cfset var rtn=structNew()/>

        <cfsavecontent variable="rtn.html">
            <cfoutput><p>#ReReplace(form.swPurpose, "\t", "&nbsp;&nbsp;", "ALL")#</p></cfoutput>
        </cfsavecontent>
        <cfreturn rtn />
    </cffunction>
</cfcomponent>
Другие вопросы по тегам