这是我的问题:我的语言(葡萄牙语)使用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/>";
这会产生:
c o r a ç ã o
这样工作正常......但我的问题是如果使用mb_substr函数不是快速简单的字符串正常访问!但我想要一个简单的方法来做到这一点....就像在正常的字符串字符访问:echo $ str [$ pos] ....有可能吗?
答案 0 :(得分:4)
mb_substr函数不像正常的字符串字符访问那样快:echo $ str [$ pos] ....有可能吗?
没有。
多字节函数必须检查每个字符以确定它占用的字节数(UTF-8中的1到4)。在那里你立刻就有了为什么字符索引($a[n]
)不起作用的原因:你不知道在你拥有 n 字符之前需要什么字节在那之前阅读所有字符。
为了加快速度,您可以在此处查看答案:How to iterate UTF-8 string in PHP?
但是,由于您使用的是ISO 8859-1或Latin-1,因此您根本不必使用mb_
函数,因为在该编码中,所有字符都是encoded in one byte。
答案 1 :(得分:1)
尝试:
preg_match_all( "/./u", $str, $ar_chars );
print_r( $ar_chars );
答案 2 :(得分:0)
...排序。如果使用固定宽度编码(ISO 8859- *,UCS-2或UTF-32或BMP中的UTF-16),则可以使用固定乘数进行字符访问。您仍然需要对多字节编码进行多次访问。