特殊文字を含む言語では、文字エンコーディングは常に少しトリッキーです。
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を参照)が、値が何らかの形で変更されています