如何计算字符串中Unicode字符的出现次数?

时间:2014-01-18 13:39:00

标签: php unicode

如何使用PHP计算字符串中Unicode字符的出现次数?
也许这是一个简单的问题,但我是PHP的一个重要人物。 我想计算一个字符串中有多少个Unicode字符U + 06cc。

波斯语中的'yeh'字符对应2个代码点 ی= u + 06cc
ي= u + 064a
u + 064a是波斯语的替代品 流行角色阿拉伯字符集CP-1256没有字符映射到U + 06cc 现在我想计算一个字符串中有多少个Unicode字符U + 06cc来检测该字符串是阿拉伯语还是波斯语。
当我使用$ count = substr_count($ str,“ى”);
或当我使用
时 $ count = substr_count($ str,“\ xDB \ x8c”);
它同时计算“ی”和“ي”,
任何想法?

2 个答案:

答案 0 :(得分:0)

我想你有一个UTF-8字符串,因为UTF-8是最合理的Unicode编码。

$count = substr_count($str, "\xDB\x8C");

是你想要的。您只需将字符串视为字节序列。在UTF-8中,多字节字符的第一个字节及其连续字节永远不会混淆(第一个字节始终为11......二进制,而连续字节始终为10......)。这可以确保您找不到与您所寻找的不同的东西。

要查找UTF-8 encoding of U+06CC我使用的fileformat.info网站,我认为这是最适合此目的的网站。

如果你在IDE中也使用UTF-8,你可以简单地编写"ى"而不是"\xDB\x8C"(在内部它们与PHP中的字符串完全相同),但是这样可以实现你已经编写了依赖于IDE(如果你需要共享你的代码通常不好)。

<小时/> 既然你已经澄清了你的问题,我的上述答案就不合适了。我把它留在那里作为其他路人的参考。

你的问题可能源于这样一个事实:阅读here似乎“ي”如果被Unicode字符U + 0654(非间距标记“阿拉伯hamsa”)修改,可能会丢失其下方的点。 。由于我的浏览器没有删除点,并添加了hamsa,我不知道当点消失时hamsa是否也应该消失。无论如何,"\xDB\x8C"可能与"\xD9\x8A\xD9\x94"具有相同的外观。我无法找到反面,即下面的双点作为非间距修改字符,这可以解释为什么substr_count($str, "\xDB\x8c")也找到了阿拉伯语 - 但也许它存在。

答案 1 :(得分:0)

我试过这个例子,它运行正常:

$str="مىمى";
$count = substr_count($str, "ى");
echo $count;

我得到了答案2,这是真的。

如果您需要更具体的答案,则应在问题中提供更具体的详细信息。