这是我的问题:我的语言(葡萄牙语)使用 ISO-8859-1 字符编码!当我想从像"coração"(心)这样的字符串中访问一个字符时,我使用:
mb_internal_encoding('ISO-8859-1');
$str = "coração";
$len = mb_strlen($str,'UTF-8');
for($i=0;$i<$len;++$i)
echo mb_substr($str, $i, 1, 'UTF-8')."<br/>";
这会产生:
cor一个ção
这工作正常...但我的问题是,如果mb_substr函数的使用不如简单的字符串正常访问快!但我想要一个简单的方法来做到这一点....就像在正常的字符串字符访问中一样:echo $str[$pos]....可能吗?
mb_substr函数不像普通字符串字符访问那样快:echo $str[$pos]....可能吗?
不。
- 每个软件开发人员绝对、肯定地必须了解 Unicode 和字符集的绝对最低要求(没有任何借口!
- 过早优化
多字节函数必须检查每个字符,以确定它占用多少字节(UTF-8 中的 1 到 4)。在那里,您立即知道字符索引($a[n]
)不起作用的原因:在读取第n个字符之前的所有字符之前,您不知道需要哪个字节来获取该字符。
为了加快速度,你可以看看这里的答案:如何在 PHP 中迭代 UTF-8 字符串?
但是,由于您使用ISO 8859-1或Latin-1,因此根本不需要使用mb_
函数,因为在编码中,所有字符都编码在一个字节中。
尝试:
preg_match_all( "/./u", $str, $ar_chars );
print_r( $ar_chars );
...有点。如果使用固定宽度编码(BMP 中的 ISO 8859-*、UCS-2 或 UTF-32 或 UTF-16),则可以使用固定乘数进行字符访问。不过,您仍然需要对多字节编码进行多次访问。