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);
}
});
});