PHPでは、文字列は異なる文字エンコード形式で存在する場合があります。最も一般的な2つのものは、ISO-8859-1(LATIN1とも呼ばれます)とUTF-8です。 ISO-8859-1は、主に西ヨーロッパの言語で使用される単一バイトエンコードであり、UTF-8はほぼすべてのキャラクターを表すことができるマルチバイトエンコードです。
外部データソース(データベース、API、ファイルなど)からデータを読むと、これらのデータのエンコード形式がプログラムで内部で使用されるエンコード形式と矛盾する可能性があります。現時点では、通常のディスプレイと処理を確保するためにエンコードを変換する必要があります。
UTF8_ENCODE()関数は、ISO-8859-1エンコードされた文字列をUTF-8エンコードに変換します。データソースがISO-8859-1エンコーディングを使用し、PHPによって内部で処理される文字列がUTF-8エンコードを使用する場合、この関数を通じてそれを変換する必要があります。
<span><span><span class="hljs-variable">$isoString</span></span><span> = </span><span><span class="hljs-string">"Café"</span></span><span>; </span><span><span class="hljs-comment">// この文字列があると仮定します ISO-8859-1 コーディング</span></span><span>
</span><span><span class="hljs-variable">$utf8String</span></span><span> = </span><span><span class="hljs-title function_ invoke__">utf8_encode</span></span><span>(</span><span><span class="hljs-variable">$isoString</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$utf8String</span></span><span>; </span><span><span class="hljs-comment">// 出力:Café</span></span><span>
</span></span>
UTF8_ENCODE()が必要かどうかを判断するには、次の条件を確認する必要があります。
データソースエンコーディングフォーマット:データはISO-8859-1エンコード(またはその他の非UTF-8エンコード)であり、UTF-8で処理または出力する必要がある場合は、 utf8_encode()を変換に使用する必要があります。
現在の環境のデフォルトの文字セット:ほとんどの最新のPHP環境は、すでにUTF-8をデフォルトの文字セットとして使用しています。アプリケーション環境がすでにUTF-8エンコードである場合、外部から読み取られるデータは実際のエンコードに従って変換する必要があります。
ブラウザまたは端末によって表示されるコーディング:アプリケーションがブラウザにデータを出力する場合、ブラウザは通常、UTF-8エンコーディングを使用することを期待します。データエンコーディングがブラウザが期待する文字セットと一致しない場合、ディスプレイの問題が発生する可能性があります。この時点で、 UTF8_ENCODE()を使用して、データを正しい文字セットに変換できます。
データベースからフィールドを読んで、エンコード形式がISO-8859-1であると仮定し、このフィールドをWebページに表示する必要があります。 Carled Codeを回避するには、通常、 utf8_encode()を使用して変換する必要があります。
<span><span><span class="hljs-comment">// データベースからお読みください ISO-8859-1 コーディング数据</span></span><span>
</span><span><span class="hljs-variable">$dbString</span></span><span> = </span><span><span class="hljs-string">"El Ni?o"</span></span><span>; </span><span><span class="hljs-comment">// データベースから読み取られた文字列があると仮定します ISO-8859-1 コーディング</span></span><span>
</span><span><span class="hljs-comment">// に変換します UTF-8 コーディング</span></span><span>
</span><span><span class="hljs-variable">$utf8String</span></span><span> = </span><span><span class="hljs-title function_ invoke__">utf8_encode</span></span><span>(</span><span><span class="hljs-variable">$dbString</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-variable">$utf8String</span></span><span>; </span><span><span class="hljs-comment">// 出力:El Ni?o</span></span><span>
</span></span>
データが既にUTF-8エンコードされていることを確認すると、 utf8_encode()を再度呼び出す必要はありません。そうしないと、不必要な変換の問題が発生する可能性があります。
場合によっては、文字列のエンコード形式がわからない場合があります。この時点で、 MB_DETECT_ENCODING()関数を使用して、文字列のエンコードを検出し、変換が必要かどうかを判断できます。
<span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"El Ni?o"</span></span><span>; </span><span><span class="hljs-comment">// 假设这个字符串的コーディング未知</span></span><span>
</span><span><span class="hljs-comment">// 检测字符串的コーディング</span></span><span>
</span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_detect_encoding</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-string">"ISO-8859-1, UTF-8"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$encoding</span></span><span> == </span><span><span class="hljs-string">"ISO-8859-1"</span></span><span>) {
</span><span><span class="hljs-comment">// の場合 ISO-8859-1 コーディング,则に変換します UTF-8</span></span><span>
</span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-title function_ invoke__">utf8_encode</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>);
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$string</span></span><span>; </span><span><span class="hljs-comment">// 出力转换后的字符串</span></span><span>
</span></span>
可能であれば、アプリケーション開発中にUTF-8エンコーディングを使用してみてください。 UTF-8は、世界中のほぼすべての言語キャラクターをサポートし、一貫性のないエンコーディングの手間を避けています。 MySQLデータベースを使用している場合は、データベースの文字セットとテーブルをUTF-8に設定することをお勧めします。
<span><span><span class="hljs-keyword">CREATE</span></span><span> DATABASE my_database </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>
このようにして、ポスト処理エンコード変換の手間を減らすことができます。