2011-06-20 2 views
3

Releventコード:PDO utf8_encoding INSERTでテキスト文字列が2回表示されますか?

$status = $db->run(
    "INSERT INTO user_wall (accountID, fromID, text, datetime) VALUES (:toID, :fromID, :text, '" . time() . "')", 
    array(":toID" => $toID, ":fromID" => %accountID, ":text" => $text) 
); 

私はこれらのコード行を含む関数を呼び出し、それを処理するために、AJAX呼び出し、それを投げ、JavaScriptから入力されたテキストを取っています。

問題のテキスト文字列がある:「Türkçe Türkçe Türkçe!

データベースを調査すると、次の値を二重utf8_encode'dである、「Türkçe Türkçe Türkçe!」に保存されます。

データベースから選択してテキストを表示すると、最初にデータベースに保存する方法はとなるはずですが、「Türkçe Türkçe Türkçe!」と表示されます。それはPDOによって準備されているよう

は、私の知る限りでは、私はデータを符号化するわけではない...

答えて

4

エンコードのb * TCHです。

  1. HTMLページがJavascriptで表示されることを確認する必要があります。 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

  2. のようなメタタグを付けてutf-8に設定します。データベースに接続した後(そして他のクエリの前に)クエリset names 'utf8'を実行します。

  3. データベースフィールド。 MySQLでは照合と呼ばれ、utf8_general_ciに設定されています(ciは大文字と小文字を区別しません)。

これらの3つのデータがある場合は、あなた自身がエンコードしている場合を除き、データは常にutf-8であるべきです。

ソースコードファイルもutf-8であることを確認してください。 Windowsのデフォルトはisoです。

+0

Dulyは指摘する。私はgeditがユニコードで保存されていれば、2のうちの2/3を実行していました。私はいつもutf8_general_ciがutf8_binと何か他のバリエーションとの違いを確信していました... –

+0

'utf8_bin'はあなたのデータを明示的にバイナリにします。私はpercsを知っていませんが、それはあなたがそれ以上のテキスト検索をすることができないようにするかもしれません。バイナリの照合は一切使用しません。他の誰かがあなたにそれを啓発するかもしれません。 – Halcyon

+0

洞察のおかげで:) –

関連する問題