2

ユーザーがワードドキュメントからテキストをコピーして貼り付けるフォームがあります。このコンテンツにはタブ文字が含まれる場合があります。オンクリック関数は、coldfusionリモート関数へのJSMXajax呼び出しを使用してフォームの送信を処理します。フォームは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

このコードを試してください:

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 に答える
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 に答える