我有这个简单的代码来存储来自CSV文件的MySQL表中的数据:
$file = "GeoLiteCity-Location.csv";
$handle = fopen($file, "r");
//loop through the csv file and insert into database
do {
$n++;
if ($data[0]) {
$city = str_replace('"', '',$data[3]);
$region = str_replace('"', '',$data[2]);
$latitude = $data[5];
$longitude = $data[6];
$country_id = $mobbuteo::$db->select('_countries', 'country_id', array('code' => str_replace('"', '',strtoupper($data[1]))));
$latlong = $mobbuteo::$db->select('_cities', '*', array('latitude' => $latitude, 'longitude' => $longitude));
if ($country_id[0]['country_id'] !== 0 && $country_id[0]['country_id'] !== '' && $country_id[0]['country_id'] !== NULL)
if (count($latlong) <= 0)
$result = $mobbuteo::$db->insert_update('insert', '_cities', array('country_id' => $country_id[0]['country_id'], 'city' => $city, 'region' => $region, 'latitude' => $latitude, 'longitude' => $longitude));
if (!$result) {
echo($city);
}
}
} while ($data = fgetcsv($handle, 1000, ",", "'"));
由于某些原因,在DB城市中,名字中的特殊字符会被切断。
例如:L·i ThiÍu
在我的数据库表中仅变为L
。我正在使用UFT8 General Ci
。
那有什么问题? 但最重要的是,我如何才能获得所有具有特殊字符的城市并正确修改其名称?
感谢您的任何建议
答案 0 :(得分:0)
检查您的脚本是否以UTF-8运行:
header('Content-Type:text/html;charset=utf-8');
检查数据库连接是否设置为UTF-8:
->query('SET NAMES utf8');
而不是str_replace
转义字符,请使用本机数据库方法(如real_escape_string
mysqli
)。您可能需要检查$mobbuteo::$db
是否有escape
或类似的方法。
答案 1 :(得分:0)
在打开与mySQL数据库的连接后尝试运行以下语句
@mysql_query('SET NAMES "utf8"', $conn);
@mysql_query("SET CHARACTER SET 'utf-8'", $conn);