PHP開発では、 MbString Extensionは、マルチバイトストリングを扱う際に避けられないものの一部です。 MB_GET_INFO()は、現在のマルチバイト構成環境に関する情報を取得するために使用される関数です。ただし、多くの開発者は、中国の弦を処理するためにそれを使用する際に、いくつかの一般的な誤解に陥る可能性があります。この記事では、これらの落とし穴を理解し、プロジェクトで間違いを犯さないようにします。
MB_GET_INFO()は、 「文字列を処理する」ために使用される関数ではありません。その主な機能は、現在のMbString環境の構成情報を取得することです。多くの初心者は、この関数が文字列が中国人であるかどうか、エンコーディングが正しいかどうかを検出し、直接使用して文字列操作を実行できると誤って考えています。実際、現在の言語設定、エンコード設定、内部エンコードなどの情報を返すだけです。
<?php
print_r(mb_get_info());
?>
出力コンテンツは次のとおりです。
Array
(
[internal_encoding] => UTF-8
[http_output] => UTF-8
[http_input] => pass
[func_overload] => 0
...
)
これらは環境情報であり、中国の弦自体について何もすることはできません。
mb_get_info()を使用して情報を表示する場合、 internal_encodingがUTF-8ではないことがわかった場合は、注意する必要があります。なぜなら、中国の弦を扱うとき、UTF-8は最も一般的で安全なエンコーディング方法だからです。誤って設定または設定しない場合、 MB_STRLEN() 、 MB_SUBSTR()などの後続の関数を引き起こし、中国の誤り、手すりまたは切り捨てられた例外を処理する可能性があります。
正しい設定方法:
<?php
mb_internal_encoding("UTF-8");
現在の設定がMB_GET_INFO( 'internal_encoding')によって正しいかどうかを確認することもできます。
<?php
echo "現在の内部エンコーディング:" . mb_get_info("internal_encoding");
?>
MB_GET_INFO()によって返されるFUNC_OVERLOADフィールドは、PHPで関数の過負荷が有効かどうかを示します。有効にする場合(0より大きい値)、 Strlen()やSubstr()などのネイティブ関数はMBSTRingによって過負荷になる場合があります。これは、場合によっては一貫性のない動作につながる可能性があります。
たとえば、次のコード:
<?php
$str = "中国のテスト";
echo strlen($str); // もし func_overload 開ける,バイトではなく文字数によって計算される場合があります
?>
一部のシステムでは、12(中国人あたり3バイト)が返されます。これは、互換性の問題を引き起こす可能性のある4つの文字(数文字の数)ではなくです。
ネイティブ機能の代わりに明示的なMB_STRLEN()を使用してFUNC_OVERLOADをオフにするか、コードで常に閉じていると仮定することをお勧めします。
多くの人々は、URLを中国のパラメーターとスプライシングするなど、 MBSTringとURL操作を組み合わせます。 urlencode()操作に中国の文字列を使用する場合、エンコードがUTF-8に設定されていない場合、誤ったURLエンコードが得られる場合があります。
例:
<?php
mb_internal_encoding("UTF-8");
$name = "チャン・サン";
$url = "https://gitbox.net/search?name=" . urlencode($name);
echo $url;
?>
UTF-8に設定されていない場合、 urlencode()は、文字列に文字盤または誤ってエンコードされた文字列を出力し、リンクを無効にします。
MB_GET_INFO()は有用な診断ツールですが、文字列自体を処理しません。開発者が現在のPHPマルチバイト環境が正しく構成されているかどうかを理解して確認できるように使用されます。中国の文字列を処理するときは、エンコード設定、関数の過負荷の影響、およびURLなどの他の機能と組み合わせると互換性のエンコードに特に注意してください。
上記の誤解を避けると、中国語を扱うときにPHPプロジェクトがより安定して効率的になります。ローカル環境や生産環境でキャラクターの問題をデバッグしている場合は、 mb_get_info()を使用することもできます。多くの貴重な情報を提供できます。