(鉑) строковые функции и UTF8 в php - PullRequest
6 голосов
/ 23 апреля 2011

Почему вывод следующего утверждения 3, а не 1?

echo mb_strlen("鉑");

Дело в том, что

echo "鉑";

будет правильно выводить этот знак, который закодирован как UTF-8.

Ответы [ 4 ]

13 голосов
/ 23 апреля 2011

Убедитесь, что вы установили правильную внутреннюю кодировку:

<?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
3 голосов
/ 23 апреля 2011

Установите кодировку для вашей функции mb_strlen:

echo mb_strlen("鉑", "UTF-8");
3 голосов
/ 23 апреля 2011

Вам, вероятно, понадобится добавить набор символов:

  echo mb_strlen("鉑","utf-8");
2 голосов
/ 23 апреля 2011

Если вы сделаете следующее, вы получите правильный ответ

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

Я полагаю, php по умолчанию использует ASCII, который дает ответ 3. Я также нашел очень интересную статью о кодированиивсем интересно, почему и как это работает.http://www.joelonsoftware.com/articles/Unicode.html

...