1

次のスクリプトがあります。

header('Content-type: text/plain; charset=utf-8');

$rq = "SELECT `name` FROM `mapamond_countries` WHERE `id` = 93";
$str = $db->GetAll($rq);

var_dump($str[0]['name']);
var_dump("شيلى");

文字列 شيلى は、データベース (phpmyadmin) からコピーして貼り付けたものです。

最初の var_dump: string(25) "بلجيكا"

2 番目の var_dump: string(8) "شيلى"

この違いの理由と修正方法を説明できますか? DB 照合、テーブル照合、列照合は utf8_unicode_ci です。

4

2 に答える 2

0

「بلجيكا」は、「شيلى」の「二重符号化」です。テーブルから SELECT HEX(col)... を選択して、何があるかを確認します。「C398C2B4C399C5A0C399E2809EC399E280B0」は、16 進数が「D8B4D98AD984D989」であるべき値を二重にエンコードした値です。二重エンコーディングについてはhttp://mysql.rjweb.org/doc.php/charcollで説明されています。Osama の回答がデータの修正に失敗した場合。そのブログを読むか、この問題についてさらに議論しましょう。

于 2015-02-25T23:06:26.083 に答える