1

パターンにマルチバイト (UTF-8) 文字を使用する場合、関数を使用mb_するか、関数uのパターンにオプションを使用する必要があることを知っていpreg_ます。

しかし、preg_関数のサブジェクトにのみマルチバイト (UTF-8) 文字を使用し、パターンに ascii 文字のみを使用すると、preg_関数 (uオプションなし) は正しく動作しますか?

この場合、関数を使用するか、パターンにオプションをmb_追加する必要があることはわかっています。u

$str = preg_replace("/$utf8_multibyte_pattern/", '', $str);

uこのコード (オプションを使用しない) が安全かどうかを知りたい:

$ascii_pattern = "[a-zA-Z0-9'$#\\\"%&()\-~|~=!@`{}[]:;+*/.,_<>?_\n\t\r]";
$multibyte_str = preg_replace("/$ascii_pattern/", '', $utf8_multibyte_str);
4

2 に答える 2

1

答えは自分で見つけたのかもしれません。

ただし、文字コードについてよく知っている人は、この回答にコメントするか、別の回答を投稿してください。

ウィキペディアによると、UTF-8 文字コードにはアスキー コードが含まれていません。

http://en.wikipedia.org/wiki/UTF-8#利点

ASCII 文字は、他のどこにも現れない 1 バイトとしてそれ自体で表されます。これにより、UTF-8 は、バイト文字列を使用する既存の API の大部分で動作しますが、少数の ASCII コードのみを特別に扱います。これにより、すべての API の新しい Unicode バージョンを作成する必要がなくなり、既存のシステムを他の Unicode エンコーディングよりもはるかに簡単に UTF-8 に変換できるようになります。

これは、uオプションのないASCIIパターンのpreg関数がマルチバイト(UTF8)のサブジェクトに対して安全であることを意味すると思います。

そして、このコード(uオプションなし)

$multibyte_str = preg_replace("/$ascii_pattern/", '', $utf8_multibyte_str);

およびこのコード(uオプション付き)

$multibyte_str = preg_replace("/$ascii_pattern/u", '', $utf8_multibyte_str);

同じだ。どちらも正しく動作します。

私は正しいですか?

于 2012-11-08T13:48:11.990 に答える
0

/u次のように unicode プロパティ ( )を使用する限り、私が知る限り安全です。

$ascii_pattern = "[a-zA-Z0-9'$#\\\"%&()\-~|~=!@`{}[]:;+*/.,_<>?_\n\t\r]";
$multibyte_str = preg_replace("/$ascii_pattern/u", '', $utf8_multibyte_str);

Unicode 文字の詳細については、こちらを参照してください。

于 2012-11-08T12:58:08.667 に答える