2

strpos() とは対照的に、iconv_strpos() の戻り値は、針が見つかった位置へのバイト単位のオフセットではなく、針の前に現れる文字数です。(ソース: http://www.php.net/manual/en/function.iconv-strpos.php )

次のコード例は、同じ値iconv_strpos()strpos()返すことを示しています。

$string = "dd.MM.yy";

echo "d: ".strpos($string, 'd'); // 0
echo "M: ".strpos($string, 'M'); // 3
echo "y: ".strpos($string, 'y'); // 6

echo "d: ".iconv_strpos($string, 'd'); // 0
echo "M: ".iconv_strpos($string, 'M'); // 3
echo "y: ".iconv_strpos($string, 'y'); // 6

strpos の代わりに iconv_strpos を使用する必要があるのはなぜですか?

4

2 に答える 2

5

マルチバイト エンコーディングを使用している場合、1 文字を可変バイト数で表すことができます (たとえば、UTF-8 では 1 から 4 まで)。これは、各バイトが常に正確に 1 文字を表すシングルバイト エンコーディングとは対照的です。

UTF-8 でエンコードされた 2 文字の文字列を考えてみましょう。最初の文字は 3 バイトで表され、2 番目の文字は 1 バイトで表されます (序数が 128 未満のすべての文字は UTF-8 でこのプロパティを持っている'a'ため、この例で使用してみましょう) )。

この場合iconv_strpos($string, 'a')、 は 1 (2 番目の文字は'a') を返し、 whileは 3 を返します (最初の 3 バイトが実際には1strpos($string, 'a')文字であると判断できないため、4 番目の文字を参照します。エンコーディングがシングルバイトであると想定します)。

于 2011-03-31T12:58:46.197 に答える
5

これは通常、UTF-8 や UTF-16 などのマルチバイト エンコーディングを使用する場合にのみ関連します。

文字は複数のバイトで構成されている場合があります (これは、UTF-8 の非 7 ビット ASCII 文字の場合です。これらはエンコード長が可変です。UTF-16 には 2 バイト文字があります)。

于 2011-03-31T12:50:16.440 に答える