クライアントから、Postgresql 8.3.9 データベースの特定のテーブルにインポートする必要があるデータの CSV ファイルが送られてきました。データベースは UTF-8 文字エンコーディングを使用します。つまり、当社の CMS では、CMS を介してフランス語でデータベースに入力されるフランス語などの複数の言語を使用できます。クライアントが画像をサーバーにアップロードし、フランス語で「alt」タグを入力する機能があります。ただし、一括更新が必要なため、特定のテーブルにフィードするための CSV が送信されました (フランス語のイメージ alt タグ用)。
CSV には、「é」などの特殊文字が含まれています。たとえば、「Bottes Adaptées Amora Cuir Faux-Croco Fauve Photo d'Ensemble」などです。
イメージ自体は 2 つの場所でホストされます。1 つは CDN、もう 1 つはローカル データベース バックアップとローカル サーバー (Web サーバー) ファイル バックアップです。PHP スクリプトを使用して CSV ファイルを読み取り、「alt」タグが 2 つの場所 (Web データベースと CDN) で更新されるように必要な処理を行っています。
しかし、(PHPを使って)CSVを読み込んでみると、思うように文字が「出てこない」。データは「Bottes Adapt�es Amora Cuir Faux-Croco Fauve Photo d'Ensemble」として提供されます。
これはデータベースとは何の関係もないと思いますが、CSV データを読み取る PHP ファイルと関係があります。読み取っているデータを印刷しても、上記の特殊文字が上記のように印刷されず、特殊文字が認識されていないかのように印刷されます。他の文字は正常に印刷されます。
これが私が使用しているコードです(データベースと対話するためにここでいくつかの特別なカスタム関数が使用されているわけではありませんが、それらは無視できます)。CSVファイルは画像名の{列1}とALTタグの{列2}で構成されています。
$handle = fopen($conn->getIncludePath() . "cronjobs/GIB_img_alt_tags_fr.csv", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
//normally I run a query here to check if the data exists - "SELECT imageid, image_fileref FROM table1 WHERE image_fileref = '". $data[0]. "'");
if ($conn->Numrows($result)) { //if rows were found -
$row=$conn->fetchArray($result);
//printing the data from $row here
}
}
fclose($handle);