2011-08-05 14 views
2

誰かが助けることができるのだろうか - 私はこれを解決したと思ったが、まだいくつかの問題がある。Mysqlの言語文字での作業

私は様々な国から継承したCMSシステムに基本的に情報を入力しています。

少しの助けと研究の後、私は少なくともデータベースに正しく保存しました。例えば、óはóとして保存されます。

しかし、DBから取得した場合でも、まだ「³」と表示されます。これをPHPのページに変換する方法はありますか?なぜこれが正しく表示されないのですか?

mysql_set_charset( 'utf8'、$ link2);を使用しました。接続の直後にセットアップファイルに名前を設定すると、問題のPHPページはutf8の正しいメタになっているように見え、ページはヘッダーにtransistionalに設定されます。

私はPHPページが文字をASCIIで表示していることを検出するmbを使っていました。

感謝しています。

おかげ

+1

ないあなたの質問への答えが、良い背景読書:[絶対最小すべてのソフトウェア開発者は絶対にUnicodeと文字セットについて肯定的に知っていなければならない!(http://www.joelonsoftware.com/articles/Unicode.html) –

+0

ありがとう、私は – mro

+0

を読んでいるよ。 óのような文字がCMSページから正しくインストールされているため、phpmyadminで正しく表示できますが、あなたはこのページのURLを書くことができますか? – mro

答えて

0

あなたの列の文字セットを選択するときBINARYキーワードを使用し、UTF-8の場合:

SELECT BINARY utf8_column, ... 

これは、UTF-8のデータは、への道で変換を取得しないことを保証しますPHP自体がエンコーディングを認識せず、文字列をバイトストリームとして扱うためです。


そして、これは、UTF-8のデータとうまく動作します、私はhtmlentitiesの代わりに使用するカスタム関数です:

function xmlEntities($s) { 
    return str_replace(array('&', '"', '<', '>'), 
         array('&amp;', '&quot;', '&lt;', '&gt;'), $s); 
} 
+0

私はそれを取ったときにラインを介して来たちょうど問題を解決しました$ otherFields [$ rowFields ["name"]] = htmlentities($ rowFields ["value" ]); Basciallyそれはutf8を台無しにするhtmlentitiesだ。私は、これらの行がサイト上のファイルの上にある(これを継承している)ように見えるので、これらを取り除くことについて心配しています。そのhtmlenetitiesを維持し、utf8を保存する方法はありますか? – mro

+0

@mro私の更新を参照してください。 – nobody

+0

@mro htmlentitiesのドキュメントを見ると、 'htmlentities($ string、ENT_QUOTES、 'UTF-8');'というエンコーディングを設定できます。しかし、すべてのプロジェクトがutf8であれば、代わりに 'htmlspecialchars'を使うことができます。エンコーディングを設定する必要はありません。 – Karolis

関連する問題