UTF-8(Unicode Transformation Format-8)は、Unicode文字セットのすべての文字を表すことができ、英語文字に1バイトストレージと他の文字に2〜4バイトストレージを使用できる可変長文字エンコードメソッドです。その利点は、世界中のさまざまな国の言語や記号で統一された方法で表現でき、ASCIIエンコードと互換性があり、Web開発およびデータベースストレージで広く使用されていることです。
PHPでは、特にデータベースとブラウザ間でデータを転送する場合、多言語Webサイトのデータ交換とストレージを処理するために、UTF-8エンコーディングがよく使用されます。エンコーディングが正しく設定されていない場合、コードの問題を発生させるのは簡単です。
PHPでは、MySQLデータベースを使用してMySQLI拡張機能を使用してデータベースを接続および操作している場合、データベース接続がUTF-8エンコードを使用していることを確認することが非常に重要です。それ以外の場合、データベーステーブルとフィールドがUTF-8エンコードで設定されていても、エンコードのミスマッチのためにデータ送信中はまだ問題が発生する可能性があります。
MySQLI :: Set_charsetメソッドを使用すると、現在のデータベース接続の文字セットを設定できます。文字セットをUTF-8に設定することにより、データクエリと挿入中にPHPおよびMySQLデータベースを正しくエンコードしてデコードできることが保証されます。
データベース接続を作成します。
データベースに接続するには、mysqli_connectまたはnew mysqli()メソッドを使用します。
セット文字セット:
データベースに正常に接続した後、 MySQLI :: set_charsetメソッドを使用して、文字セットをUTF-8に設定します。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 1. データベース接続を作成します</span></span><span>
</span><span><span class="hljs-variable">$host</span></span><span> = </span><span><span class="hljs-string">'localhost'</span></span><span>;
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">'root'</span></span><span>;
</span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-variable">$dbname</span></span><span> = </span><span><span class="hljs-string">'your_database'</span></span><span>;
</span><span><span class="hljs-variable">$conn</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-variable">$host</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$dbname</span></span><span>);
</span><span><span class="hljs-comment">// 接続が成功しているかどうかを確認してください</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$conn</span></span><span>->connect_error) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"接続に失敗しました: "</span></span><span> . </span><span><span class="hljs-variable">$conn</span></span><span>->connect_error);
}
</span><span><span class="hljs-comment">// 2. キャラクターを設定します UTF-8</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$conn</span></span><span>-></span><span><span class="hljs-title function_ invoke__">set_charset</span></span><span>(</span><span><span class="hljs-string">"utf8"</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"間違い: 文字セットを設定できません UTF-8: "</span></span><span> . </span><span><span class="hljs-variable">$conn</span></span><span>->error;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"現在の文字セット: "</span></span><span> . </span><span><span class="hljs-variable">$conn</span></span><span>-></span><span><span class="hljs-title function_ invoke__">character_set_name</span></span><span>();
}
</span><span><span class="hljs-comment">// 3. クエリやその他の操作を実行します</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM your_table"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$conn</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>->num_rows > </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-keyword">while</span></span><span>(</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"データ: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'column_name'</span></span><span>] . </span><span><span class="hljs-string">"<br>"</span></span><span>;
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"没有データ"</span></span><span>;
}
</span><span><span class="hljs-comment">// 4. 接続を閉じます</span></span><span>
</span><span><span class="hljs-variable">$conn</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>データベース接続:
データベース接続が新しいmysqli()を使用して作成され、接続が成功したかどうかを確認しました。接続が失敗した場合、プログラムはdie()を介して終了し、エラーメッセージが表示されます。
セット文字セット:
$ conn-> set_charset( "utf8")を使用して、接続文字をUTF-8に設定します。この時点で、PHPとMySQLデータベース間のすべてのデータ転送は、UTF-8を使用してエンコードされます。設定が失敗した場合、 $ conn->エラーを介してエラーメッセージを出力できます。
クエリを実行します:
返されたデータがUTF-8エンコードされた文字を正しく表示できるように、 Your_Tableテーブルのデータをクエリします。
接続を閉じます:
最後に、 $ conn-> close()を使用してデータベース接続を閉じます。
データベーステーブルの文字セット:
PHPでキャラクターセットを設定することに加えて、データベーステーブルとフィールドの文字セットもUTF-8であることを確認する必要があります。テーブルのキャラクターセットを表示するテーブルの作成を介して表示したり、次のSQLステートメントを使用してテーブルの文字セットを変更したりできます。
<span><span><span class="hljs-keyword">ALTER</span></span><span> </span><span><span class="hljs-keyword">TABLE</span></span><span> your_table </span><span><span class="hljs-keyword">CONVERT</span></span><span> </span><span><span class="hljs-keyword">TO</span></span><span> </span><span><span class="hljs-type">CHARACTER</span></span><span> </span><span><span class="hljs-keyword">SET</span></span><span> utf8 </span><span><span class="hljs-keyword">COLLATE</span></span><span> utf8_general_ci;
</span></span>ブラウザエンコーディング:
ブラウザからの文字化けコードを避けるために、正しい文字セットがHTMLページの<head>タグに設定されていることを確認してください。通常、次のタグ設定を使用できます。
<span><span><span class="hljs-tag"><<span class="hljs-name">meta</span></span></span><span> </span><span><span class="hljs-attr">charset</span></span><span>=</span><span><span class="hljs-string">"UTF-8"</span></span><span>>
</span></span> MySQL Serverデフォルト文字セット:
MySQL ServerにデフォルトでUTF-8エンコードを使用したい場合は、MySQL構成ファイルmy.cnfまたはmy.iniで設定できます。
<span><span><span class="hljs-section">[mysqld]</span></span><span>
</span><span><span class="hljs-attr">character-set-server</span></span><span> = utf8
</span><span><span class="hljs-attr">collation-server</span></span><span> = utf8_general_ci
</span></span>MySQLIを使用してUTF-8エンコードのセットアップ:: Set_charsetは、多言語データがPHPとMySQLデータベースの間で適切に処理されるようにするための重要なステップです。文字セットを正しく構成することにより、文字化けしたコードの問題を回避できるだけでなく、送信中にデータが失われたり誤っていないことを確認します。データベーステーブルとフィールドの文字セットもUTF-8であることを確認し、アプリケーション全体で一貫したエンコード設定を維持し、それによりプロジェクトの互換性とスケーラビリティを改善します。
関連タグ:
mysqli