PHP中的字符串函数和UTF8

7
为什么以下语句的输出是3而不是1?
echo mb_strlen("鉑");

事情是这样的,
echo "鉑";

将正确输出已编码为UTF-8的符号。


1
只是一个想法,但我假设你已经尝试过 mb_strlen('鉑', 'UTF-8'); 了吗? - John Parker
4个回答

14

确保设置正确的内部编码:

<?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

您很可能需要添加字符集:

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

就像middaparka所建议的一样 ;) - Erik

3

将编码设置为您的 mb_strlen 函数:

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

2

如果按照以下步骤操作,你将获得正确的答案。

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

我猜测PHP默认使用ASCII编码,因此输出结果为3。我还发现了一篇非常有趣的关于编码的文章,对于任何对其原理和工作方式感兴趣的人都很值得一读。 http://www.joelonsoftware.com/articles/Unicode.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接