3

国名と通貨記号を格納する mysql データベース テーブルがあります。CHARSET は正しく UTF8 に設定されています。

これはテーブルに挿入されたデータの例です

国 (country_name、currency_name、currency_code、currency_symbol) の値に挿入します。
('UK','ポンド','GBP','£');

データベースを見ると、ポンド記号は問題ないように見えますが、データベースから取得してウェブサイトに表示すると、ポンド記号の代わりに疑問符が入った奇妙な四角形の記号が表示されます。

my.cnfで編集-文字セットはlatin1に設定されていました-utf8に変更しました-次に、ルートとしてログインして\ sを実行しました-返されました

サーバー文字セット: utf8
クライアント文字セット: utf8

照合

-- データベース
SELECT default_collat​​ion_name
  FROM information_schema.schema
 WHERE schema_name = 'swipe_prod';

これは何も返さない

-  テーブル
SELECT table_collat​​ion
  FROM information_schema.tables
 WHERE TABLE_NAME = '国';

これは utf8_general_ci を返します

-- 列
SELECT 照合名
  FROM information_schema.columns
 WHERE TABLE_NAME = '国';

これは7行を返しますが、すべてnullまたはutf8_general_ciのいずれかです

PHPコード

<?php
$con = mysql_connect("localhost","user","123456");
mysql_select_db("swipe_db", $con);
$result = mysql_query("SELECT * FROM country where country_name='UK'");
while($row = mysql_fetch_array($result))
{
  echo $row['country_name'] . " " . $row['currency_symbol'];
}
mysql_close($con);
?>

アドバイスお願いします よろしくお願いします

4

7 に答える 7

7

REPLACEMENT CHARACTERとも呼ばれる「内部に疑問符が付いた奇妙な正方形の記号」が表示された場合、これは通常、80-FF(128-255)の範囲のバイトがあり、システムがレンダリングしようとしていることを示します。 UTF-8でそれ。

そのバイト範囲全体は、UTF-8のシングルバイト文字には無効ですが、ISO-8859-1などの西洋のエンコーディングではすべて非常に一般的です。

ページを表示し、文字エンコードをUTF-8からISO-8859-1に手動で切り替えると(FirefoxではView>> Character Encoding>> Western (ISO-8859-1))、ポンド記号が正しく表示されます。

では、何が問題なのですか?言うのは難しいです-これが汚される可能性のある場所は数十あります。しかし、おそらくそれはデータベースレベルにあります。通常、テーブルのCHARSETをUTF8に設定するだけでは不十分です。キャラクターがシステム内を適切に移動する前に、すべての文字セットと照合が正常である必要があります。よくある落とし穴は、接続文字セットが正しく設定されていないことです。そのため、ここから始めます。

さらにガイダンスが必要な場合はお知らせください。

編集

その値に対して実際に格納されているバイトを確認するには、このクエリを実行します。

SELECT hex( currency_symbol )
  FROM country
 WHERE country_name = 'UK'

表示されている場合A3は、文字がISO-8859-1として保存されていることがわかります。これは、DBへの書き込み中または書き込み前に問題が発生することを意味します。

表示されている場合C2A3は、文字がUTF-8として格納されていることがわかります。これは、DBから読み取った後、ブラウザに書き込む前に問題が発生することを意味します。

編集2

-- Database
SELECT default_collation_name
  FROM information_schema.schemata
 WHERE schema_name = 'your_db_name';

-- Table
SELECT table_collation
  FROM information_schema.tables
 WHERE TABLE_NAME = 'country';

-- Columns
SELECT collation_name
  FROM information_schema.columns
 WHERE TABLE_NAME = 'country';
于 2010-06-02T16:29:31.903 に答える
3

私の2ペンスのチッピング。データベースからデータを出力するには、utf8_encode()を使用します。これは他のキャラクターも同様に世話をしているようです。

于 2013-08-28T11:38:31.500 に答える
1

同じ問題があり、MySQL データベースで SELECT クエリを実行する直前に以下の PHP コードを追加して解決しました。

mysql_query("SET character_set_results=utf8", $link);
于 2012-02-06T09:09:58.213 に答える
1

私も同じ問題を抱えていました。私がしたことは、データベース(PHP)に接続した直後にこれを実行したことです:

mysql_query("SET NAMES utf8");

お役に立てれば..

于 2012-01-04T11:51:52.553 に答える
1

使ってみて

&pound;

£記号の代わりに、£記号を印刷する代わりに、次のようにします。

<%=replace(stringWithPoundInIt,"£","&pound;"%>
于 2010-06-02T16:43:47.600 に答える
0

ここでチェックできます。うまくいくかどうかはわかりませんが、これは奇妙なので、これまでに見たことがないので試してみてください。

于 2010-06-02T16:30:24.463 に答える