2

1つのテーブル名が格納されるPHP/MySQLアプリケーションを開発しました。これらの名前には、特殊文字(é、à、ë、...など)が含まれる場合があります。

テーブルを作成するときに、collocation-itemをUTF-8に設定するのを忘れていましたが、現在はLATIN1_SWEDISH_CIに設定されています。そのため、phpMyAdminで一部のデータが正しく表示されません。しかし、PHPページに名前を表示すると、それらの特殊文字は正しく表示されます。これは、UTF-8を使用しているPHPファイルからの抜粋です。

<?php ... ?>
<html>
  <head>
    <meta http-equiv="Content-Type" content-"text/html; charset="UTF-8">
....

私が言ったように、特殊文字は適切に表示されます。これまでのところ...問題ありません。

しかし今、私はそのデータをCSVファイルにエクスポートして何を推測したいと思いますか?特殊文字はCSVファイルに含まれていません。私のPHP-export-fileには、次のコード行が含まれています。

<?php
mysql_query("SET NAMES utf8");
header('Content-Type: text/html; charset=UTF-8');
...

しかし、特殊文字は表示されませんか?

誰かがこの問題の解決策を持っていますか?ExcelでCSVを開き、[検索と置換]を使用するのは少しばかげていると思うので。HTMLエスケープコードを使用することは問題外です。そういうわけで、UTF-8はありませんか?

4

1 に答える 1

2

MySQL が Latin-1 データと見なす UTF-8 でエンコードされたデータを保存しました。任意のバイト シーケンスは有効な Latin-1 であるため、MySQL はこれについて文句を言いません。データの取得に使用される接続の接続文字セットは、データの挿入に使用されるものと同じであるため、正しいデータが Web ページに表示されます。しかし、実際に格納された文字を表示するのに苦労するユーティリティでデータを表示すると、誤ってエンコードされたテキストが表示されます。

必要な作業が 2 つあります。まず、データベース接続コードを変更して、データベースへのすべての接続で UTF-8 文字セットが使用されるようにする必要があります。これは、設定ファイルを使用するか、接続するたびに SET NAMES ステートメントを発行するだけで実現できます。

次に、データベースに既に保存されている誤ってエンコードされたデータを修正する必要があります。テーブルを変更して文字セットを UTF-8 に直接変更しないでください。その場合、二重の UTF-8 でエンコードされたデータになってしまいます。代わりに、alter table クエリを使用して列をバイナリ文字セットに変更し、その後、テーブルを再度 UTF-8 に変更します。

于 2012-04-24T10:53:57.650 に答える