0

JQuery.ajax を使用して送信する必要がある単純な HTML フォームがあります。

<form id="myForm" name="myForm" action="mySite/data.php" method="post">
    <label for="name">Name: </label>
    <input type="text" id="name" name="name" size="30"/>
    <label for="text">Text:</label> <br/>
    <textarea class="required textarea" cols="60" id="request" name="request"  </textarea>
    <br/>
    <input type="submit" id="submit" name="submit" value="Submit"/>
    <input type="reset" value="Clear"/>
</form> 

そして、JQuery.ajax:

<script type="text/javascript">
  var frm = $('#myForm');
  frm.submit(function () {
    if(frm.valid() == true){
         $.ajax({
              type: frm.attr('method'),
              url: frm.attr('action'),
              data: frm.serialize(),
              success: function (data) {
                    alert("Your Request Has Been Received. Thank You.");
                }
            });  
    } else {
        alert("Please Enter a Valid Request");
    }
    return false;
    });   
</script>

フォーム データは mySQL データベースに保存され、さらに JQuery.ajax を使用して別のページに表示されます。これらのページとデータベースの間に、データを読み書きするための php ページがあります。

switch($_REQUEST['action'])
{
case "submit":
    addRequest($_GET['name'], $_GET['content']);
    header('Location: myPage.html'); 
    break;

}

if(isset($_POST['request'])){
$content = stripslashes($_POST["request"]);

echo "<h3>Here is the Request You Just Entered: </h3><br/>";
echo "<table width=40%><tr><td style='font-weight:bold;'>Name: </td><td>" . $name . "</td></tr>" .   "<tr><td style='font-weight:bold;'>Your Request: </td><td>" . $content . "</td></tr></table>";
$name = addslashes($name);
$content = addslashes($content);

echo "<br/><a style='padding-right:3%;' href='?action=submit&name=" . $name . 
         "&content=" . $content . "'>Submit Request</a>";

echo "<a href='javascript:history.back()'>Back to the Site</a>";

die();
} else {
echo "No Data Submitted";
}
?>

ページにはすべてのコンテンツが適切に表示されますが、addRequest() 関数に送信される情報を表示すると、データがエスケープされず、問題が発生します。

テキスト入力をエスケープする必要がない限り、すべてがうまく機能します。システムをデバッグしたところ、JQuery でフォーム データを送信する前に、文字列をエスケープする必要があることがわかりました。

どうすればそれを適切に行うことができますか、それとも私の問題は別のものですか? 事前に助けてくれてありがとう。

4

2 に答える 2

0

.serialize()すべてを適切にエンコードするため、jQuery では何もエスケープする必要はありません。

ただし、アンカー タグで URL を作成する場合は、URL エンコードする必要があります。

echo "<br/><a style='padding-right:3%;' href='?action=submit&name=" . urlencode($name) . 
     "&content=" . urlencode($content) . "'>Submit Request</a>";
于 2013-07-26T21:34:07.037 に答える