编写CSV文件:显示 字符

时间:2014-10-08 06:35:41

标签: javascript php csv cordova

使用phonegap我正在创建一个可以导出csv文件的应用程序。我这样做是通过使用文件编写器(http://docs.phonegap.com/en/3.3.0/cordova_file_file.md.html#FileWriter)。

问题是,当我使用 OpenOffice.org 打开导出的.csv文件时,它显示以下字符:degree 在度数符号(°)之前。 以下是详细信息:

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

结果(在openoffice.org应用程序中打开csv文件)

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

1 个答案:

答案 0 :(得分: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