PHPのMbString拡張機能は、マルチバイト文字列を扱う際に多くの非常に実用的な機能を提供します。その中で、 MB_GET_INFO()およびMB_DETECT_ENCODING()は、初心者と混乱することがよくあります。それらはすべてマルチバイト文字エンコードに関連していますが、機能はまったく異なります。今日は、それらの違いと該当するシナリオを慎重に確認します。
MB_GET_INFO()は、現在のMBSTring環境の構成情報を取得するために使用される関数です。デフォルトの内部エンコード、HTTP入力/出力エンコード、現在の言語設定など、エンコード設定に関する多くの詳細を説明できます。
mb_get_info(string $type = null): array|string|false
<?php
// すべての構成情報を取得します
$info = mb_get_info();
print_r($info);
// 現在の内部コードを取得します
$internalEncoding = mb_get_info("internal_encoding");
echo "内部コードはです: " . $internalEncoding;
?>
実行の結果は、次のようなものかもしれません(部分的):
Array
(
[internal_encoding] => UTF-8
[http_output] => UTF-8
[http_input] => pass
[language] => neutral
...
)
現在のデフォルトエンコードがUTF-8であるかどうかを確認したいなど、特定のアイテムのみに興味がある場合、この機能は非常に便利です。
mb_detect_encoding()は別の方法であり、文字列のエンコードを推測するために使用されます。これは、ユーザーによってアップロードされたファイル、フォームデータ、クローラーがキャッチしたWebコンテンツなど、未知のソースから文字列を受信する場合、非常に便利なツールです。
mb_detect_encoding(string $string, array|string|null $encodings = null, bool $strict = false): string|false
<?php
// Webページをcraうとします
$content = file_get_contents("https://gitbox.net/page.html");
// エンコーディングを検出してみてください
$encoding = mb_detect_encoding($content, ["UTF-8", "GBK", "ISO-8859-1"]);
echo "検出されたエンコードはです: " . $encoding;
?>
また、厳密なモードがエンコーディングをより厳密に一致させることもできます。
$encoding = mb_detect_encoding($content, ["UTF-8", "GBK"], true);
機能ポイント | mb_get_info() | mb_detect_encoding() |
---|---|---|
効果 | エンコード環境構成を取得します | 文字列の実際のエンコードを検出します |
パラメーター | オプションのパラメーターは、返品コンテンツを決定します | 文字列を渡す必要があり、エンコーディングリストを選択できます。 |
返品タイプ | 配列または文字列 | 文字列またはfalse |
アプリケーションシナリオ | エンコード設定、デバッグを確認します | 不明なエンコードされた文字列を決定します |
入力コンテンツとの関係 | コンテンツを入力する必要はありません | 文字列コンテンツを提供する必要があります |
より簡単な類推は、次のとおりです。
MB_GET_INFO() : PHPに尋ねて、どのように今どのように設定しましたか?
mb_detect_encoding() :この文字列のエンコードは何ですか?
私は誤ってMB_GET_INFOがあなたに文字列エンコードを伝えることができると思っていました:
PHPの現在のエンコード設定のみを伝え、あなたがそれに与える文字列をエンコードするものを認識しません。
エンコーディングリストを指定せずに検出します。
デフォルトでは、 mb_detect_encoding()は内部エンコード順序を使用します。候補者のエンコーディング範囲を明確に知っている場合は、手動で渡すことが最善であり、精度とパフォーマンスを向上させることができます。
UTF-8がデフォルトで使用されるかどうかなど、PHPが現在エンコードを設定している方法を知りたい場合は、 mb_get_info()を使用します。
gitbox.netからキャッチされたHTMLピースなど、正体不明のエンコードされたテキストが手元にある場合は、 MB_DETECT_ENCODING()を使用して、UTF-8、GBKなどのかどうかを判断する必要があります。
2つの機能は互いに補完し、独自の義務を果たします。それらをはっきりと理解した後、それらは非常に使いやすいでしょう。