0

特殊文字を含む言語では、文字エンコーディングは常に少しトリッキーです。

MySQL データベース サーバーは UTF-8 Unicode (utf8) の下にあります。

照合は utf8-general-ci です

mysqli を使用して、データベースからデータを取得する場合:

while($row = $result->fetch_assoc()){
    foreach ($row as $field=>$value){
        print(mb_detect_encoding($value).' '.$value."<br/>");
    }
}

文字は UTF-8 ではなく ASCII でエンコードされます。それはどこから来たのですか ?

詳細情報: 私の Apache AddDefaultCharset は utf-8 です

HTML ページのエンコーディング文字セットは utf-8 です。

utf-8 である別のデータベースからエクスポートされたスクリプトを使用してデータベースを構築します

PS : mysqli_set_charset($mysqli, "utf8") を試しましたが、何も変わりません。

いつ、どのようにデータが ASCII にエンコードされるのか知りたいですか?

ありがとうございました

PS 2 : これは mb_detect_encoding で得た結果です

ASCII ESSAI
ASCII 34
ASCII Bonjour
ASCII 41
UTF-8 ���������������

および DOMElement からの警告: Warning: DOMElement::setAttribute() [domelement.setattribute]: string is not in UTF-8

PS 3 : 問題は UTF-8 データにあります。

データベースには èèèèèèèèèèèèèèèèèèèèè があります

文字列の周りに utf8_encode を使用すると、問題はなくなり、結果として次のようになります。

ASCII ESSAI
ASCII 34
ASCII Bonjour
ASCII 41
UTF-8 èèèèèèèèèèèèèèè
ASCII 43

したがって、明らかに私のutf8文字列はutf8文字列です(mb_detect_encodingを参照)が、値が何らかの形で変更されています

4

2 に答える 2

0

前述のように、7 ビット ASCII は UTF-8 のサブセットであるため、「Bonjour」は ASCII として検出され、「café, 3€」は UTF-8 として検出されます (ただし、「caf」と「, 3」は表示されます)。

utf8_encodeSQL から入力された変数を ( なしで) DOMElement にすぐに渡すとうまくいくはずです。

于 2013-09-27T14:55:37.357 に答える
-1

mysqli を PDO に置き換えました

できます。utf8 文字列は変更されません...

したがって、問題はmysqliにあります(二度と使用しないでください)

@deceze : 文字セットを検出でき、すべてが正しく設定されている場合にうまく機能します

于 2013-09-27T16:26:16.893 に答える