Webページに表示されないポンドシンボル
-
23-10-2019 - |
質問
国名と通貨シンボルを保存するためのMySQLデータベーステーブルがあります - charsetはUTF8に正しく設定されています。
これは、テーブルに挿入されたデータの例です
insert into country ( country_name, currency_name, currency_code, currency_symbol) values ('UK','Pounds','GBP','£');
データベースを見ると、ポンドシンボルが正常に見えますが、データベースから取得してウェブサイトに表示すると、ポンドシンボルの代わりに内部に疑問符が表示されます。
my.cnfで編集 - キャラクターセットはlatin1に設定されていました - 私はそれをutf8に変更しました - それから私はrootとしてログインして実行しました - それは返されました
Server characterset: utf8 Client characterset: utf8
照合
-- Database SELECT default_collation_name FROM information_schema.schemata WHERE schema_name = 'swipe_prod'; THIS DOES NOT RETURN ANYTHING -- Table SELECT table_collation FROM information_schema.tables WHERE TABLE_NAME = 'country'; THIS RETURNS utf8_general_ci -- Columns SELECT collation_name FROM information_schema.columns WHERE TABLE_NAME = 'country'; THIS RETURNS 7 ROWS but all have either null or 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); ?>
アドバイスありがとうございます
解決
あなたが「中に疑問符がある奇妙な正方形のシンボル」を見ると 交換キャラクター, 、それは通常、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';
他のヒント
私の2ペンスでチッピング。私が使う utf8_encode() データベースからデータを出力します。これも他のキャラクターの世話をしているようです。
使用してみてください
£
£シンボルの代わりに、£サインを印刷する場所で、次のことを行います。
<%=replace(stringWithPoundInIt,"£","£"%>
同じ問題がありました。私がしたことは、データベース(PHP)に接続した直後にこれを実行したことでした。
mysql_query("SET NAMES utf8");
お役に立てれば..
同じ問題があり、MySQLデータベースで選択クエリを実行する直前に以下のPHPコードを追加することで解決しました。
mysql_query("SET character_set_results=utf8", $link);
私は自分でこの問題に出くわし、出力段階で「」を使用して解決しました。MB_CONVERT_ENCODING".
あなたの例を使って...
echo $row['country_name'] . " " . mb_convert_encoding($row['currency_symbol'], "UTF-8");
チェックアウトできます ここ。それが機能するかどうかはわかりませんが、これは奇妙なので試してみてください。