2

我有一个表单,用户可以从 Word 文档中复制和粘贴文本。此内容可能包含制表符。点击函数使用 JSMX ajax 调用 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&btn=%20OnClick%20,%20Submit%20

使用 Firebug,我可以看到发布到函数的内容已编码。制表符是 %9。我可以将 cfc 放入表单的操作中,并且该功能不会失败。

我的解决方法是在将标签发送到函数之前使用 javascript 去除标签。但是,我想了解为什么选项卡会导致 500 错误,以及是否可以采取任何措施来防止这种情况发生。

4

2 回答 2

0

在交还之前,您可以用 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>
于 2012-05-10T15:39:16.690 回答
0

试试这个代码:

function goForm(f){
    var param = escape(f);//Or also encodeURI(f) or even encodeURIComponent(f)
    http('POST','testCFC.cfc?method=test',goForm_RTN,param);
}
于 2012-05-09T22:16:47.823 回答