3 に答える
1
これはおそらくエンコーディングの問題です。
適切なエンコードが設定されていないか、一部のアポストロフィが手動でエンコードされています。
テーブルにutf8
エンコードが設定されている
ことを確認してください
$db->set_charset('utf8')
接続後。
(それを行った後、新しい使徒をデータベースに書き込み、それを読み戻そうとします)
コードがhtmlspecialcharsなどのような役に立たないエンコーディングを実行しないことを確認してください。
- データベースから問題のある値を選択してから
urlencode()
、 - CSV値から対応するものを読み取り
urlencode()
、 - 結果を比較する
于 2013-02-22T05:03:14.297 に答える
0
これで問題は解決しました。
<?php
function utf8_fopen_read($fileName) {
$fc = iconv('windows-1250', 'utf-8', file_get_contents($fileName));
$handle=fopen("php://memory", "rw");
fwrite($handle, $fc);
fseek($handle, 0);
return $handle;
}
?>
デモ:
<?php
ini_set('default_charset','utf-8');
header('content-type: text/plain');
$sql = new mysqli('localhost','root','','test');
$sql->set_charset('utf8');
$rows = array();
$fh = utf8_fopen_read("sample.txt");
while (($data = fgetcsv($fh, 1000, ",")) !== false) {
foreach ($data as $value) {
$rows[] = $value;
}
}
foreach($rows as $row){
$row = trim($row);
$Name = $row;
print "$Name\r\n";
}
print "-----------------\r\n";
foreach($rows as $row){
$Name = trim($row);
$stmt = $sql->prepare("SELECT ID,Name FROM `establishment` WHERE Name=?");
$stmt->bind_param("s",$Name);
$stmt->execute() or die($stmt->error);
$stmt->store_result();
if($stmt->num_rows==0){
// do insert query
}
else{
$stmt->bind_result($ID,$Name);
$stmt->fetch();
print "$ID:$Name already exist\r\n";
}
}
?>
sample.txt (タブ区切りファイル) として保存します。
Adams’ Inn
Ambassador Inn a
Amberley Suite
America’s Best Inn
Amber's Inn
于 2013-02-22T08:40:04.943 に答える
-1
湾曲したアポストロフィは、Microsoftの忌まわしいものです。このリンクは、それらを本来あるべき一重引用符に戻す方法を説明しています:http: //www.toao.net/48-replacing-smart-quotes-and-em-dashes-in-mysql
于 2013-02-22T06:06:20.453 に答える