php - 在 PHP 中有从多字节字符串中获取字符的简单方法吗?

标签 php string encoding multibyte

这是我的问题:我的语言(葡萄牙语)使用 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]......这可能吗?

最佳答案

mb_substr function is not fast as [...] like in normal string character access: echo $str[$pos].... It is possible?

没有。

多字节函数必须检查每个字符以确定它占用了多少字节(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 .

关于php - 在 PHP 中有从多字节字符串中获取字符的简单方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10360764/

相关文章:

php - 无法发送 php 邮件()

加载 mysqldump 文件时出现 sql 语法错误

php - 使用AppEngine创建云存储桶

php - MySQL 使用拉丁语存储希腊语

php - CSS 未在 Woocommerce Wordpress 模板文件中执行

regex - 匹配除包含 '_iq_' 以外的所有内容

javascript - 修改字符串中的 "a"标签并在javascript函数中返回更新后的字符串

java - SQL:长比较或字符串,哪个更快

php - Android 不显示特殊字符

c++ - 如何通过 linux 套接字将 UTF-8 文本放入 std::string