Multibyte文字列を扱うとき、PHPはMBSTRing拡張機能を提供して、文字エンコードが正しく解析されるようにします。特に、UTF-8、Shift-JIS、EUC-JPなどのマルチバイトエンコードされたテキストに対処する必要がある場合、正規表現はエンコード設定の影響を受ける場合があります。幸いなことに、PHPはMB_REGEX_ENCODING()およびMB_GET_INFO()機能を提供し、開発者が正規表現のエンコーディング設定を管理できるようにします。
MB_REGEX_ENCODING()関数を使用して、マルチバイトの正規表現に現在使用されているエンコードを設定または取得できます。
文法:
mb_regex_encoding(?string $encoding = null): string|bool
パラメーターが渡されない場合、現在のエンコードが返されます。
エンコーディングパラメーターが渡されると、正規表現のエンコードを設定し、以前のエンコードを返します。
MB_GET_INFO()は、言語、内部エンコード、HTTP入力/出力エンコード、正規表現エンコーディングなど、現在のMBSTring環境の詳細な構成情報を取得するために使用されます。
使用法:
mb_get_info(?string $type = null): array|string|false
$タイプが「Regex_Encoding」に設定されると、現在使用されているエンコードを返します。
MB_REGEX_ENCODING()を使用して通常のエンコードを設定し、設定がMB_GET_INFO()を使用して効果的かどうかを確認する方法を示す完全な例を以下に示します。
<?php
// 使用する正規表現を設定します UTF-8 コーディング
$previousEncoding = mb_regex_encoding('UTF-8');
echo "原本的正则表达式コーディング为:$previousEncoding\n";
// 验证当前正则表达式コーディング是否为 UTF-8
$currentRegexEncoding = mb_get_info('regex_encoding');
echo "当前的正则表达式コーディング为:$currentRegexEncoding\n";
// サンプルの通常の一致
$pattern = '\A[\p{Hiragana}ー]+\z'; // Hiraganaキャラクターに一致します
$subject = 'こんにちは';
if (mb_ereg($pattern, $subject)) {
echo "正常に一致します:$subject それはヒラガナのテキストです\n";
} else {
echo "マッチが失敗しました:$subject ヒラガナの規則に準拠していません\n";
}
?>
上記の例:
最初に、UTF-8にエンコードする正規表現を設定しました。
次に、 MB_GET_INFO()を使用して設定を確認します。
次に、 MB_EREG()を使用して、Unicode属性を一致させます。
PHPのインストールには、 MBSTRING拡張機能が有効になり、通常のユニコードモードがサポートされていることを確認してください。
特に漢字、仮名、またはその他の特殊文字を含む複数の言語でコンテンツを扱う場合、適切なエンコーディングを使用すると、定期的な試合では文字化けや不正確な結果を避けることができます。現在のテキストエンコーディングをサポートしていない正規表現を使用する場合、一致する障害やエラーさえも簡単に発生することができます。
Q:正規表現のエンコードを明示的に設定しない場合、デフォルトは何ですか? A:デフォルトの内部文字エンコードが使用されます( MB_INTERNAL_ENCODING()によって設定)が、特定の値はシステム環境によって異なる場合があるため、明示的に設定することをお勧めします。
Q: PHPがMbstringをサポートしているかどうかを確認する方法は? A: phpinfo()を実行するか、 extension_loaded( 'mbstring')を使用して確認できます。