2

私の意見では、「strlen」関数は文字列内の文字数のみを返す必要があります。他には何もありません。そして、ASCII 文字または Unicode 文字のどちらをカウントするかに関係なく、そうします。文字は、ASCII テーブルまたは UTF-8 テーブルの特定の位置を指す文字です。これ以上何もない。

何らかの理由で文字列のバイト長を知りたい場合は、別の関数を使用する必要があります。私は PHP スクリプトの初心者なので、その関数はまだ見つかりませんでした。(「bytelen()」のようなものであるべきですか?)

4

4 に答える 4

1

はい、それが最も論理的な設計です。ただし、PHP は最初からマルチバイト文字セットをサポートする予定はありません。代わりに、それは一種の混沌とし​​た方法で何年にもわたって進化してきました. 質問に PHP 4 のタグを付けましたが、PHP 5 にはまだまともな Unicode サポートがありません (近い将来変更されるとは思いません)。

とにかく、これにはいくつかの理由があります。

  • PHP は、エンタープライズ ルールによって制御される集中型の設計を持つ企業が所有するクローズド ソースの商用製品ではありません。

  • PHP は、1995 年に、静的なホームページに何らかの機能を必要とする人物によって、個人的なプロジェクトとしてリリースされました。当時は、Unicode サポートは必要ありませんでした。

  • strlen() のようなコア関数を変更する場合は、以前の機能を壊さないようにする必要があります。簡単ではない。新しい別の関数を書くのはずっと簡単です。

アップデート

すみません、質問の2番目の部分を忘れていました。Unicode 文字列を処理する必要がある場合は、別の関数セットを使用する必要があります。

次の章も興味深いかもしれません。

使用する予定の各機能に必要な PHP のバージョンをメモしておいてください。PHP 4 はかなり古いです。

于 2010-03-10T11:28:47.497 に答える
1

mb_strlen()あなたが求めていることをします。

于 2010-03-10T11:07:19.173 に答える
1

私があなたをひどく誤解していなければ、ここの他の回答でほのめかされているように、 strlen() あなたの「bytelen() 」です。

strlen()自体は、utf-8 またはその他のマルチバイト文字セットをサポートしていません。適切なstrlen()が必要な場合は、mb_strlen()が必要です。

Pentium10 の関数 strBytes($str)は、エンコーディングが utf-8 であることがわかっていて、何らかの理由で PHP4 の超低バージョンで立ち往生している場合、(テストではなく) ざっと見てみると、良い代替手段のように見えます。

(この動作の背後にある理由については、Álvaro G. Vicario の投稿を参照することをお勧めします。適切なネイティブ UTF-8 サポートは、PHP6 に付属する予定です。)

于 2010-03-19T17:23:21.310 に答える