0
4

3 に答える 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 に答える