0

いくつかの調査を行い、CF 2016 に取り組んだ後、1​​ つの問題が見つかりました。JQuery/Ajax を使用してフォーム データを送信します。テキスト領域の 1 つにセミ カラムを入力する;と、シンボルが に変換され&#59ます。セミカラムが HTML コードに変換される原因がわかりません。送信する前にデータフォームを確認しました。Test;コンソールに入力すると、次のようになりますTest%3B。次に、フォーム スコープを cfmail の cffunction の一番上にダンプしました。フォーム フィールドの値は次のようになりTest&#59;ます。HTML/JQuery コードで作成した例を次に示します。

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=10; IE=11" />
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
        <title>Test Page</title>
        <script type="text/javascript" src="JQuery/jquery-3.2.1.min.js"></script>
        <script type="text/javascript" src="JQuery/jquery-ui.js"></script>
    </head>
    <body>
        <div id="myContainer">
            <form name="myForm" id="myForm" method="POST" action="#" class="frmSubmitData">
                <fieldset>
                    <legend>Test Form</legend>
                    <div>
                        <span style="display: inline-block; vertical-align:top; font-weight:bold;">Comments:</span>
                        <textarea name="my_comments" id="my_comments" row="2" cols="55" required></textarea>
                    </div>
                    <div>
                        <input type="submit" name="frmSubmit" id="frmSubmit" value="Submit" />
                    </div>
                </fieldset>
            </form>
        </div>
        <script>
            $('.frmSubmitData').on('submit', function(e){
                e.preventDefault();
                var formData = $('#myForm').serialize();
                console.log(formData);

                $.ajax({
                    type: 'POST',
                    encoding:"UTF-8",
                    url: 'Components/myTest.cfc?method=testForm',
                    data: formData,
                    dataType: 'json'
                }).done(function(obj){
                    if(obj.STATUS === 200){
                        console.log(obj.FORMDATA);
                    }else{
                        alert('Error');
                    }
                }).fail(function(jqXHR, textStatus, errorThrown){
                   alert("Error: "+errorThrown);
                });
            });
        </script>
    </body>
</html>

常温核融合機能の例:

<cfcomponent>
    <cfsetting enablecfoutputonly="yes" showdebugoutput="no" requesttimeout="3600">

    <cffunction name="testForm" access="remote" output="true" returnformat="JSON">
        <cfmail to="myemail@gmail.com" from="myemail@gmail.com" subject="Test Form Scope" type="text">
            <cfloop collection="#form#" item="theField">
                <cfoutput>#theField# = #form[theField]#<br></cfoutput>
            </cfloop>
        </cfmail>

        <cfset fnResults = StructNew()>
        <cfset fnResults.message = "Record successfully saved.">
        <cfset fnResults.status = "200">
        <cfset fnResults.formdata = #FORM#>

        <cfreturn fnResults>
    </cffunction>
</cfcomponent>

このコードは CF10 で正常に動作しましたが、CF 2016 にアップグレードすると、この問題が発生しました。ここでも、以前とまったく同じクライアント側コードが使用され、セミカラム チャーターは変換されませんでした。誰かが同じ問題を経験し、これを修正する方法を知っている場合は、私に知らせてください. ありがとうございました!

4

1 に答える 1

1

エンコードの問題があります。理解するのは難しいですが、通常は簡単に解決できます。通常<meta charset="utf-8" />、HTML head に追加するだけで十分です。これは、よく理解されているエンコーディング形式で投稿することをブラウザに要求します。コードベースを検索して、UTF-8 以外の任意のタイプのエンコーディングを探すことができます。

また、セキュリティ保護手段が 2 回 (データベースの前に 1 回、データベースから戻った後に 1 回) 実行されているなど、何らかのエンコードが行われている可能性もあります。それを確認してください。これは EncodeForHtml() である必要があり、データベースに送信される前ではなく、ページに印刷されているときにのみ実行する必要があります。データベースに直接アクセスして、データベースに挿入される前にエンコードされているかどうかを確認します。ページの出力だけを見ないでください。これにより、それがどこで起こっているかについての手がかりが得られます。

于 2018-01-30T20:54:57.530 に答える