Символ табуляции, вызывающий сбой компонента 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", " ", "ALL")#</p></cfoutput>
</cfsavecontent>
<cfreturn rtn />
</cffunction>
</cfcomponent>