MB_Substitute_Characterは、マルチバイト文字セットライブラリの設定項目であり、文字エンコード変換が失敗したときに代替文字を定義します。キャラクターを正しく変換できない場合、 MB_SUBSTITETITE_CHARACTERは、PHPがこの非可変キャラクターを処理する方法を決定します。デフォルトでは、文字を変換できない場合、PHPは使用しますか?代替キャラクターとして。
たとえば、UTF-8からGBKに変換する際にGBKで表現できない文字に遭遇した場合、デフォルトの動作はこれらの文字を疑問符に置き換えることです。
<span><span><span class="hljs-title function_ invoke__">mb_substitute_character</span></span><span>(</span><span><span class="hljs-string">'none'</span></span><span>); </span><span><span class="hljs-comment">// 代替文字は使用されません</span></span><span>
</span><span><span class="hljs-title function_ invoke__">mb_substitute_character</span></span><span>(</span><span><span class="hljs-string">'?'</span></span><span>); </span><span><span class="hljs-comment">// 使用"?"代替キャラクターとして</span></span><span>
</span></span>mb_substitute_characterを呼び出すことにより、代替文字の形式を制御し、空の文字列または特定のシンボルに設定することもできます。
MB_CONVERT_ENCODINGは、文字エンコードを変換するためにPHPで使用される関数です。 UTF-8 、 GBK 、 ISO-8859-1など、一般的に使用されるさまざまな文字エンコード形式をサポートします。
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"中国の弦"</span></span><span>;
</span><span><span class="hljs-variable">$converted_str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-string">'ISO-8859-1'</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$converted_str</span></span><span>;
</span></span>UTF-8エンコーディングからISO-8859-1エンコードに$ strを変換し、変換するときに、ソース文字列の文字に基づいて交換する必要があるかどうかを決定します。ターゲットエンコーディングがソース文字内の特定の文字を表すことができない場合、 MB_SUBSTITETITE_CHARACTERの構成は、代替文字の表現を決定します。
MB_SUBSTITETITE_CHARACTERとMB_CONVERT_ENCODINGの共同使用は、文字列をあるエンコードから別のエンコードに変換する必要がある場合に重要です。いくつかの一般的なヒントがあります:
場合によっては、ソース文字列の文字は、ターゲットエンコーディングの対応する文字を見つけることができません。現時点では、 MB_SUBSTITETITE_CHARACTERを使用して代替文字を設定して、文字化けのコードを避けることができます。たとえば、特定のシンボルや文字列で変換できない文字を交換します。
<span><span><span class="hljs-title function_ invoke__">mb_substitute_character</span></span><span>(</span><span><span class="hljs-string">'!'</span></span><span>);
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-string">'こんにちは,世界'</span></span><span>, </span><span><span class="hljs-string">'ASCII'</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$str</span></span><span>; </span><span><span class="hljs-comment">// 出力 "???,!"</span></span><span>
</span></span>この例では、世界の中国の中国の部分であるキャラクターは、 ASCIIエンコーディングで表現できないので、代替キャラクターです!変換できない文字の代わりに使用されます。
キャラクターの置換を完全に回避する場合は、代わりに元の文字列に直接戻るか、エラーが発生したときに実行を停止するには、 mb_substitute_characterをなしに設定できます。現時点では、変換できないすべての文字は交換されず、システムはエラーを投げたり、予測不可能な結果を返したりする場合があります。
<span><span><span class="hljs-title function_ invoke__">mb_substitute_character</span></span><span>(</span><span><span class="hljs-string">'none'</span></span><span>);
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-string">'こんにちは,世界'</span></span><span>, </span><span><span class="hljs-string">'ASCII'</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$str</span></span><span>; </span><span><span class="hljs-comment">// 変換ができない場合,警告またはエラーが表示されます</span></span><span>
</span></span>ターゲットエンコーディングがソースエンコーディング内のすべての文字を効果的にサポートできることを確認してください。ソース文字列が主に何らかの文字セットを使用し、ターゲット文字セットがより広い範囲の文字(UTF-8など)をサポートすることがわかっている場合、代替文字の使用を避けることができます。一般的に、UTF-8は、ほぼすべての言語の文字と互換性のあるユニバーサルエンコードオプションです。
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"中国の弦"</span></span><span>;
</span><span><span class="hljs-variable">$converted_str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'GBK'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$converted_str</span></span><span>; </span><span><span class="hljs-comment">// 通常の変換</span></span><span>
</span></span>ターゲットエンコードがすべての文字をサポートできるかどうかわからない場合は、文字変換の結果を事前に検証するか、 MB_SUBSTITETITE_CHARACTERを使用して変換に失敗する可能性のある文字を処理することをお勧めします。
場合によっては、 MB_CONVERT_ENCODINGを使用するときに変換できない文字に遭遇した場合、スムーズな変換プロセスを確保するためにエラー処理メカニズムが必要になる場合があります。 @を使用して警告を抑制し、ビジネスニーズに基づいて追加のエラーキャプチャが必要かどうかを判断できます。
<span><span><span class="hljs-title function_ invoke__">mb_substitute_character</span></span><span>(</span><span><span class="hljs-string">'none'</span></span><span>);
</span><span><span class="hljs-variable">$str</span></span><span> = @</span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-string">'変換できない文字'</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'ISO-8859-1'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$str</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"文字変換に失敗しました"</span></span><span>;
}
</span></span>MB_Substitute_CharacterおよびMB_CONVERT_ENCODINGは、キャラクターエンコード変換のさまざまな複雑な状況を処理するのに役立つ2つの強力なPHP関数です。これらの2つの機能を合理的に使用すると、文字化けのコードの問題を効果的に回避し、より良いユーザーエクスペリエンスを提供できます。
適切な代替文字( MB_SUBSTITETITE_CHARACTERなど)を設定すると、文字変換が失敗したときに不必要な文字化けコードを避けることができます。
MB_CONVERT_ENCODINGを使用する場合は、ターゲットエンコードを合理的に選択し、ソース文字列がターゲットエンコードと互換性があることを確認してください。
これら2つの機能を柔軟に使用することにより、PHP開発者は、プロセシングのキャラクターをエンコードし、アプリケーションのクロスプラットフォームおよび国際的なサポート機能を改善することでより熟練することができます。