MB_ENCODE_NUMERICALENTITYは、指定された範囲を満たしている文字列で数値エンティティ形式にエンコードするために使用されます。数値エンティティ形式は、&#xxxxに似ています。 HTMLでは、 xxxxは文字に対応するユニコードコードポイントです。
関数プロトタイプ:
string mb_encode_numericentity(string $str, array $convmap, string $encoding = mb_internal_encoding(), bool $is_hex = false)
$ str :エンコードする文字列。
$ CONVMAP :マップ配列を変換して、エンコードする必要がある文字範囲を指定します。この形式は、開始コードポイント、エンドコードポイント、オフセット値、およびコード値をそれぞれ表す4つの整数のグループです。
$エンコード:文字列エンコード、デフォルトで内部エンコード。
$ is_hex : Trueに設定されている場合、数値エンティティは16進数で表されます。
MB_DECODE_NUMERICALENTITYは、数値エンティティ形式の文字列を元のマルチバイト文字列に変換するために使用されます。
関数プロトタイプ:
string mb_decode_numericentity(string $str, array $convmap, string $encoding = mb_internal_encoding())
$ str :デコードする文字列。
$ CONVMAP : MB_ENCODE_NUMERICALENTITYと同じ関数でマップアレイを変換します。
$エンコーディング:文字列エンコード。
中国語を含む文字列をエンコードし、すべての漢字を数値エンティティに変換し、それらをデコードして元の文字列に復元する必要があるとします。
<?php
// 変換マップを定義します,一般的に使用される漢字エンコーディング範囲をカバーします
$convmap = [0x4E00, 0x9FFF, 0, 0xFFFF];
// エンコードされる文字列
$str = "こんにちは,世界!Hello World!";
// コーディング,漢字を数値エンティティに変換します
$encoded = mb_encode_numericentity($str, $convmap, "UTF-8");
echo "コーディング后:\n" . $encoded . "\n";
// デコード,数値エンティティを漢字に戻します
$decoded = mb_decode_numericentity($encoded, $convmap, "UTF-8");
echo "デコード后:\n" . $decoded . "\n";
?>
実行結果:
コーディング后:
你好,世界!Hello World!
デコード后:
こんにちは,世界!Hello World!
Multibyte文字を使用してURLの部分をエンコードして、送信プロセスが安全で仕様に準拠していることを確認する必要がある場合があります。以下は、URLのパスパートのエンコードを使用して数値エンティティを使用して、それをデコードする簡単な例です。
<?php
$convmap = [0x4E00, 0x9FFF, 0, 0xFFFF];
$url = "https://gitbox.net/パス/テスト";
// 只对パス部分コーディング
$parsed = parse_url($url);
$encoded_path = mb_encode_numericentity(urldecode($parsed['path']), $convmap, "UTF-8");
// 拼接コーディング后的 URL
$encoded_url = $parsed['scheme'] . "://" . $parsed['host'] . $encoded_path;
echo "コーディング后的 URL:\n" . $encoded_url . "\n";
// デコードパス
$decoded_path = mb_decode_numericentity($encoded_path, $convmap, "UTF-8");
// 完全に復元します URL
$decoded_url = $parsed['scheme'] . "://" . $parsed['host'] . $decoded_path;
echo "デコード后的 URL:\n" . $decoded_url . "\n";
?>
出力:
コーディング后的 URL:
https://gitbox.net/车路/测试
デコード后的 URL:
https://gitbox.net/パス/テスト
MB_ENCODE_NUMERICALENTITYは、文字列内の指定された範囲内の文字を数値エンティティエンコードに変換し、送信またはストレージ中にマルチバイト文字が破損しないように効果的に保護することができます。
MB_DECODE_NUMERICALENTITYは、エンコードされた数値エンティティを対応するマルチバイト文字に戻す責任があります。
これらの2つの機能は、互いに組み合わせて使用され、多言語環境での文字列エンコードの問題を扱う場合に非常に便利であり、特殊文字または安全な伝送を必要とするテキストデータを使用したURLを処理するのに特に適しています。
これらの2つの機能を習得すると、マルチバイト文字列処理の柔軟性とセキュリティを大幅に改善できます。