6

次のステートメントの出力が 1 ではなく 3 になるのはなぜですか?

echo mb_strlen("鉑");

事はそれです

echo "鉑";

UTF-8 としてエンコードされたこの記号を適切に出力します。

4

4 に答える 4

13

適切な内部エンコーディングを設定していることを確認してください。

<?php
echo mb_internal_encoding() . '<br />';

echo mb_strlen('鉑', 'utf-8') . '<br />';
echo mb_strlen('鉑') . '<br />';

mb_internal_encoding('utf-8');
echo mb_internal_encoding() . '<br />';
echo mb_strlen('鉑') . '<br />';

// ISO-8859-1
// 1
// 3
// UTF-8
// 1
于 2011-04-22T22:07:04.353 に答える
3

おそらく文字セットを追加する必要があります:

  echo mb_strlen("鉑","utf-8");
于 2011-04-22T22:04:51.373 に答える
3

エンコードを mb_strlen 関数に設定します。

echo mb_strlen("鉑", "UTF-8");
于 2011-04-22T22:05:09.223 に答える
2

次のようにすると、正しい答えが得られます

echo mb_strlen("鉑", "UTF-8");

PHP はデフォルトで ASCII に設定されていると思いますが、これは 3 の答えを生成します。エンコーディングがなぜ、どのように機能するのかに興味のある人のために、エンコーディングに関する非常に興味深い記事も見つけました。 http://www.joelonsoftware.com/articles/Unicode.html

于 2011-04-22T22:05:38.987 に答える