2014-10-08 65 views
0

使用phonegap我創建一個可以導出csv文件的應用程序。我通過使用文件編寫器(http://docs.phonegap.com/en/3.3.0/cordova_file_file.md.html#FileWriter)來做到這一點。寫一個CSV文件:顯示 Â 字符

問題是,當我打開使用OpenOffice.org它顯示此字符導出.csv文件:一個程度符號(°)之前。 下面是詳細信息:

HTML

<select> 
    <option value="&#176;C"> &#176;C </option> 
<select> 

價值被保存在數據庫中:

ID | temperature | temperature_unit 
--- ------------- ----------------- 
1 | 36  |  °C 

PHP

while($row = $STH->fetch()) 
    $row['temperature_unit'] = html_entity_decode($row['temperature_unit']); 
    $row_set[] = $row; 
} 

echo json_encode($row_set); 

使用Javascript(縮短)

//data = json_encoded $row_set 
var datatoexport = JSON.parse(data) 

var content = "Temperature \n"; 

for(var x in datatoexport) { 
    content += datatoexport[x].temperature + " " + datatoexport[x].temperature_unit; 
} 

//write content to file 
writer.write(content); 
writer.onwriteend = function(evt) { 
    alert("File exported"); 
}; 

結果(CSV文件中的openoffice.org應用程序中打開)

Temperature 
----------- 
36 �Â�°C 


編輯:AJAX和PHP代碼來保存數據到數據庫(縮短)

AJAX

assetinfo = {temp:"35",temp_unit:"°C"} 

$.post(serverURL + 'API/save.php', 
    { 
     temperature: assetinfo.temp, 
     temp_unit: assetinfo.temp_unit 
    }, 
    function(data) { 
     alert("saved"); 
     } 
    }); 

PHP

$temp = $_REQUEST['temperature']; 
$temp_unit = $_REQUEST['temp_unit']; 

$STH = $DBH->prepare("INSERT INTO bearing_table (temperature, temperature_unit) VALUES (:temp, :temp_unit)"); 
$STH->bindParam(':temp', $temp); 
$STH->bindParam(':temp_unit', $temp_unit); 
$STH->execute(); 
+0

這是一個編碼問題,在你編寫UTF-8(°)爲'LATIN1'的地方。數據庫中已經有錯誤的值。你的數據庫列編碼是否設置爲UTF-8? – mudasobwa 2014-10-08 06:56:39

+0

@mudasobwa表的排序規則目前設置爲「latin1_swedish_ci」,我應該如何設置它? – clintgh 2014-10-08 07:02:59

回答

0

這是一個編碼的問題,某處你寫的UTF-8(°)作爲LATIN1。數據庫中已經有錯誤的值。

將表的列歸類設置爲utf8_general_ci,並且不要忘記用正確的值「°C」更新數據庫。

UPD

  • HTML應該使用UTF-8編碼: <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  • 在Ajax請求有可能contentType: "charset=utf-8",明確指定。
  • 嘗試將$_REQUEST['temp_unit']值刪除以查看值在保存到數據庫之前是否損壞。

UPD2

+0

我試着將列的排序規則更改爲你所說的,但它仍然保存「°C」 – clintgh 2014-10-08 07:13:10

+0

1.據我所知,這是一個「靜態」值,使用'phpMySqlAdmin'或其他類似的方法保存。 2.將數據保存到數據庫是否存在問題,請提供用於將值寫入數據庫的代碼。 3.您的頁面是否設置爲UTF-8編碼?嘗試將''° C「'更改爲明確的'°C'並查看正在打印的內容。 – mudasobwa 2014-10-08 07:15:25

+0

我編輯了我的問題,我添加了你問的問題 – clintgh 2014-10-08 07:28:59