1

mySQLのテーブルを更新するフォームがあります。動作しているようですが、フォームの入力フィールドにスペースがあると、奇妙な文字が挿入されます。"Â"

これは私が使用している文字セットと関係があると感じていますが、これまでこの種の問題が発生したことがないため、よくわかりません。

これがコードです。

if($_POST){

    $db = new DB_Connection();
    $return = array();
    $sqlmap = array();
    $count = count($_POST['id']);

    for ($i = 0; $i < $count; $i++) {
        foreach($_POST as $column => $value){
            if(empty($value)) $value = "";
            $sqlmap[$column] = $value[$i];
        }
        //echo "<pre>".print_r($sqlmap,true)."</pre>";
        unset($sqlmap['command']);

        $tableid = $sqlmap['id'];
        $exclude = array("id","Date");

        $sql = "UPDATE contact_form SET ";
        $sqlloop = "";
        foreach($sqlmap as $key => $value){
                if(!in_array($key,$exclude)){
                    $sqlloop .= "`".$key."`='".mysql_real_escape_string($value)."',";
                }
        }
        $sqlloop .= " Date = CURDATE() ";
        $sqlloop = str_replace("Â","",$sqlloop);
        $sqlloop = str_replace("Â ","",$sqlloop);
        $sqlloop = str_replace("_"," ",$sqlloop);
        //$sqlloop = substr($sqlloop, 0, -1);
        $sql .= $sqlloop;
        $sql .= " WHERE id = '".$tableid."';";
        //echo $sql;
        $result = $db->query($sql,"website");
        if (!$result) $return['error'] = "ERROR:".$db->getError();
        else {
            $return['success'] = "SUCCESS";
            echo json_encode($return);
        }
    }
}

それは「空白」スペースがある場合にのみ発生するようです。ストリッピングや交換などを試しましたが、何も機能していないようです。

ヘルプ?

アップデート:

だから私はグーグルでいくつか掘り下げていて、フォームをシリアル化すると、この空白のエントリが%c2%A0としてエンコードされていることがわかりました。私はJqueryを使用しています。シリアライズ()。これは、空の入力シリアル化の通常の動作ですか?

以下は私のJqueryコードです:

  $("form[name='selectedform']").submit(function(e){
           e.preventDefault();
            $.ajax({
            type: "post",
            dataType: 'json',
            url: "/system/curlbridge.php",
            data: $("#selectedform").serialize(),
            success: function(data){
                    alert(data.Sucess);

            },
            error: function(XMLHttpRequest, textStatus, errorThrown) { 
                alert("Status: " + textStatus); 
                alert("Error: " + errorThrown); 
            } 
            });
    });
4

1 に答える 1

1

%C2%A0は、コードポイントU + 00A0のUTF-8エンコーディングであり、非ブレークスペースとも呼ばれます。これがどこで生成されているのかは明確ではありません。

表示されている理由Âは、コードがUTF-8データをLatin-1であるかのように処理しているためですが、これは表示時間の問題である可能性があります。ブラウザが出力しているデータをUTF-8として確実に解釈するには、関連するヘッダーを含めます:http ://www.w3.org/International/O-HTTP-charset

于 2013-03-21T20:32:32.233 に答える