8

次の文章は私たちダミーにとって簡単な言葉で何を意味するのだろうかと思っていました。

そして、バイトシーケンスとは何ですか?そして、1バイトに何文字ありますか?

iconv_strlen() counts the occurrences of characters in the given byte sequence str on the basis of the specified character set, the result of which is not necessarily identical to the length of the string in byte.

4

4 に答える 4

12

たとえば、日本語の文字「こ」を見てみましょう。UTF-8エンコーディングを想定すると、これは3バイト文字(0xE3 0x81 0x93)です。strlen代わりに使用するとどうなるか見てみましょう。

$ php -r 'echo strlen("こ") . "\n";'
3

strlenはバイトをカウントしているため、結果は3になります。ただし、これはUTF-8エンコーディングによると1文字のみです。そこでiconv_strlen登場します。UTF-8では、3バイトで構成されていても、これが1文字であることを認識しています。したがって、代わりにこれを試してみると、次のようになります。

$ php -r 'echo iconv_strlen("こ", "UTF-8") . "\n";'
1

私たちは1を取得します。それがその説明が指摘することを意味するものです。

于 2011-05-22T04:41:13.240 に答える
1

文字列の長さはバイト単位です。文字列内の各文字が1バイトで表されている場合に限り、その文字列内の文字数はバイト数と等しくなります。これは、たとえば英語の文字にも当てはまります。一部またはすべての文字を表すために複数のバイトを使用する表現(つまり、エンコーディング)の場合、文字数はバイト数*より少なくなります。たとえば、考えられるすべての漢字を1バイトで表すことはできません。

したがって、エンコーディングが指定された場合、iconv_strlenは文字列内の文字数をカウントしようとします。バイトシーケンスは、文字列内のバイトの順序です。中国語を含む文字列の場合、UTF8エンコーディングを使用すると、たとえば、14文字の20バイトの文字列を使用できます。

*文字が1バイト未満で表される場合は、それ以上になる可能性があります。

于 2011-05-22T04:44:36.597 に答える
0

iconv_strlen()指定された文字セットに基づいて、指定されたバイト シーケンス内の文字の出現回数をカウントしstrます。その結果は、バイト単位の文字列の長さと必ずしも同じではありません。

翻訳:

  • byte sequence:一連のバイト (1 バイト = 8 ビット) であるstringの別の単語01011010 00011001 01101011。バイト シーケンスは、、などの文字を表します。ABC
  • character set: 別名encoding 。バイトを文字にマップする方法を指定します。たとえば、ASCII 文字セット01000001表します。A
  • not necessarily identical to the length […] in byte: ASCII 文字セットでは、1 バイトは正確に 1 文字を表します。これは、すべての文字セットに当てはまるわけではありません。1 つの文字を表すために 2 バイト、3 バイト、またはそれ以上のバイトが使用される場合もあります。これは、1 バイトに 256 の異なる値しか保持できず、言語によっては 256 文字を超える文字 (中国語や日本語など) を使用して記述されているためです。Unicode は、すべての人間の言語のすべての文字を 1 つの文字セットにマップしようとさえしますが、これには 1 文字あたり 1 バイトよりもはるかに多くのバイトが必要です。

要約すれば:

iconv_strlen()文字セットを考慮して、指定された文字列内の文字をカウントします。そのため、文字数とバイト数が一致しない場合があります。

于 2011-05-22T05:47:01.770 に答える