2013-03-21 39 views
1

我有一個表格在mySQL中更新表格。它似乎正在工作,但是當表單輸入字段中有空格時,它會插入一個奇怪的字符。 「PHP 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); 
     } 
    } 
} 

它似乎只發生在有「空白」空間時。我嘗試了剝離和重新渲染以及其他一些東西,但似乎沒有任何工作。

幫助?

UPDATE:

所以我一直在做谷歌上的一些挖掘,我發現,當我序列化,形式是空白的條目越來越編碼爲%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); 
      } 
      }); 
    }); 

回答

1

%C2%A0是碼點U + 00A0的UTF-8編碼,也被稱爲非間斷空間。目前尚不清楚在哪裏產生。

你看到Â的原因是因爲你的代碼是處理UTF-8的數據,就好像它是Latin-1的,儘管這可能只是一個顯示 - 時間問題。爲了確保您的瀏覽器解釋您輸出的數據爲UTF-8,請包含相關標題:http://www.w3.org/International/O-HTTP-charset