<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 事前に依存しないコードの例</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"プログラム環境を初期化します...<br>"</span></span><span>;
</span><span><span class="hljs-variable">$version</span></span><span> = </span><span><span class="hljs-title function_ invoke__">phpversion</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"PHPバージョン:"</span></span><span> . </span><span><span class="hljs-variable">$version</span></span><span> . </span><span><span class="hljs-string">"<br>"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
データベース操作にPHPのMySQLI拡張機能を使用する場合、文字セットの問題は、データを書くことに文字化けまたはエラーを引き起こす可能性が最も高い要因の1つです。 mysqli :: set_charsetは、データベース接続文字セットをセットアップするための公式の推奨方法ですが、データがデータベースに正しく書き込まれるように設定した後、いくつかの詳細に注意を払う必要があります。
<span><span><span class="hljs-variable">$mysqli</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-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_errno) {
</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">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-comment">// キャラクターを設定します utf8mb4</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">set_charset</span></span><span>(</span><span><span class="hljs-string">"utf8mb4"</span></span><span>)) {
</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">$mysqli</span></span><span>->error);
}
</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">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">character_set_name</span></span><span>();
</span></span>
ここでは、emojiなどの特殊文字を含む完全なユニコードをサポートするため、 UTF8MB4が推奨される文字セットです。
接続文字セットが正しく設定されていても、データベーステーブルまたはフィールドの文字セットが異なる場合、依然としてGarledが表示されます。チェックリストとフィールドの文字セットは、SQLを介して照会できます。
<span><span><span class="hljs-keyword">SHOW</span></span><span> </span><span><span class="hljs-keyword">CREATE</span></span><span> </span><span><span class="hljs-keyword">TABLE</span></span><span> your_table;
</span></span>
テーブルとフィールドの文字をUTF8MB4に均一に設定することをお勧めします。
<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> utf8mb4 </span><span><span class="hljs-keyword">COLLATE</span></span><span> utf8mb4_unicode_ci;
</span></span>
直接スプライシングSQL文字列は、キャラクターエンコードの問題またはSQLインジェクションリスクをエンコードする傾向があります。前処理ステートメントを使用して、データが正しいエンコードで記述されるようにします。
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO your_table (name, content) VALUES (?, ?)"</span></span><span>);
</span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-string">"ユーザーをテストします"</span></span><span>;
</span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-string">"特殊文字を含むいくつかの内容を以下に示します ??"</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"ss"</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>, </span><span><span class="hljs-variable">$content</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span></span>
MySQLIは、接続文字セットに基づいてパラメーターを自動的に処理し、それにより文字化された文字のリスクを減らします。
PHPファイル自体は、BOMなしでUTF-8として保存する必要があります。
HTMLページは、文字セットを宣言する必要があります。
<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>
このようにして、ユーザーが入力したデータ、PHPで処理された文字列、およびデータベースに書き込まれた文字セットは一貫しています。
$ mysqli-> set_charset( "utf8mb4")を使用して接続文字セットを設定します。
データベース、テーブル、およびフィールド文字セットが接続文字セットと一致していることを確認してください。
前処理ステートメントを使用してデータを挿入してみてください。
PHPファイルとページがUTF-8としてエンコードされていることを確認してください。
これらの手順に従って、データベースにデータを書き込むときに文字エラーや文字化けコードを避けてください。
関連タグ:
mysqli