首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UTF-8字符串中找到最常用的字符(例如唐犬土用家犬尨犬山桑)有问题吗?

问在UTF-8字符串中找到最常用的字符(例如唐犬土用家犬尨犬山桑)有问题吗?
EN

Stack Overflow用户
提问于 2010-10-23 01:24:16
回答 1查看 361关注 0票数 1

从MySQL数据库中,我可以提取以下utf-8字符:

"唐犬土用家犬尨犬山桑山犬巴戦師子幻日幻月引綱忠犬愛犬戌年成犬教条教義"

我正在尝试查找这个字符串中最常用的字符。我尝试将每个as元素放入数组$arr并执行array_count_values($arr);不幸的是,数组操作(或者print_r是罪魁祸首?)生成如下错误编码的输出: php在其他情况下我可以很好地显示字符(例如,从MySQL中检索并在[0] => � [1] => � [2] => � [3] => �中显示字符就可以了!),但是数组函数(或数组输出)似乎把事情搞乱了。

我已经更改了/etc/php5/apache2/php.ini

把default_charset = "utf-8"放进去。

(我还有SET NAMES ...等)

A)问题出在哪里?B)我可以在不使用数组的情况下完成这项工作吗(例如,只使用字符串函数)?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-23 07:12:49

如何将字符串转换为数组?PHP在默认情况下不是多字节安全的,所以它可能会在中间拆分多字节字符。

记住,在UTF-8中,字符的长度是可变的。有些字符是一个字节,有些是两个、三个或四个。您将需要一个非常聪明的字符串拆分算法,它知道何时两个或三个字节是一个字符,并将它们留在一起。

如果没有这样的算法,最简单的解决方案可能是将字符串转换为UTF-32。现在所有字符都是四字节长,可以每四个字节拆分一次(对于简单的PHP字符串函数来说,这意味着每四个字符,因为PHP认为一个字节就是一个字符)。

但是,组合变音符号可能仍然是一个问题(两个Unicode字符组成一个可打印字符)。但至少你不会得到坏的Unicode。您可能会获得组合DIAERESIS本身,但这并不是很糟糕。我不确定组合Unicode字符在多大程度上适用于东亚语言。我不是Unicode专家。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3999337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档