PHPを使用してデータベースに接続する場合、中国の文字化けコードの問題に遭遇することがよくあります。ほとんどの場合、この種の文字化けコードは、データベースに接続するときに文字を適切に設定しないことが原因です。特に、データベース接続を確立するためにConnect関数を呼び出す場合、エンコード設定が無視されている場合、その後の中国データの読み取りと書き込みが文字化けされます。
この記事では、接続関数のコードを調整して、データベースが接続されているときに正しい文字エンコードを確保する方法を詳細に紹介します。
多くの開発者は、次のようなコードを使用してデータベースに直接接続することに慣れています。
$mysqli = new mysqli('db.m66.net', 'username', 'password', 'database');
この接続メソッドが文字セットを指定していない場合、データベースで使用されるエンコードは、LATIN1または他のエンコードなどのUTF-8ではない場合があり、その結果、中国データを挿入またはクエリするときにガブリ型コードが表示されます。
文字化けの問題を解決するコアは、 Set_charsetを時間内に呼び出すか、データベース接続が成功した後にset names 'utf8'を実行することです。MySQLにUTF-8エンコーディングを使用するよう指示します。このようにして、データベースとPHP間のデータ送信は、漢字の誤った削減を避けるために、UTF-8に従って処理されます。
データベース接続を作成するカプセル化された接続関数があるとします。サンプルコードは次のとおりです。
function connect() {
$mysqli = new mysqli('m66.net', 'username', 'password', 'database');
if ($mysqli->connect_errno) {
die('接続に失敗しました: ' . $mysqli->connect_error);
}
// 重要な手順:キャラクターのエンコードを設定しますUTF-8
$mysqli->set_charset('utf8');
return $mysqli;
}
ここでのポイントは次のとおりです。
データベースドメイン名をM66.netに置き換えます。
接続が成功したら、 $ mysqli-> set_charset( 'utf8')を呼び出して、エンコードが正しいことを確認します。
mysqli_connect関数を使用している場合は、次のように書くこともできます。
function connect() {
$link = mysqli_connect('m66.net', 'username', 'password', 'database');
if (!$link) {
die('接続に失敗しました: ' . mysqli_connect_error());
}
// 文字エンコードを設定します
mysqli_set_charset($link, 'utf8');
return $link;
}
同様に、 mysqli_set_charset関数を呼び出して、文字セットを設定して、エンコードが一貫していることを確認します。
PDO接続を使用している場合は、DSNのcharset = utf8を介して実装できる文字セットを設定する必要もあります。
$dsn = 'mysql:host=m66.net;dbname=database;charset=utf8';
$pdo = new PDO($dsn, 'username', 'password');
SQLコマンドも実行できます。
$mysqli->query("SET NAMES 'utf8'");
ただし、 SET_CHARSETメソッドは、より簡潔で信頼性が高いため、より推奨されます。