0

我有这个简单的代码可以将 soem 数据从 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ÍuL在我的数据库表中。我正在使用UFT8 General Ci.

那里有什么问题?但最重要的是,我现在如何获得所有带有特殊字符并正确固定名称的城市?

感谢您的任何建议

4

2 回答 2

0

检查您的脚本是否以 UTF-8 运行:

header('Content-Type:text/html;charset=utf-8');

检查您的数据库连接是否设置为 UTF-8:

->query('SET NAMES utf8');

与其str_replace转义字符,不如使用本机数据库方法(如real_escape_stringfor mysqli)。您可能想检查您$mobbuteo::$db是否调用了方法escape或类似方法。

于 2013-09-17T12:57:00.253 回答
0

打开与 mySQL 数据库的连接后,尝试运行以下语句

@mysql_query('SET NAMES "utf8"', $conn);
@mysql_query("SET CHARACTER SET 'utf-8'", $conn);
于 2013-09-17T12:57:45.143 回答