Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何计算字符串中Unicode字符的出现次数?_Php_Unicode - Fatal编程技术网

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

Php 如何计算字符串中Unicode字符的出现次数?,php,unicode,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,ى

如何使用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\u count$str\xDB\x8c; 它既包括ی也包括ي, 你知道吗?

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

$count = substr_count($str, "\xDB\x8C");
这就是你想要的。您只需将字符串视为字节序列。在UTF-8中,多字节字符的第一个字节和它的连续字节永远不能混淆。第一个字节总是11。。。。。。二进制,而连续字节始终为10。。。。。。。这可以确保你找不到与你正在寻找的不同的东西

为了找到答案,我使用了这个网站,我认为这是最好的

如果您在IDE中也使用UTF-8,您可以简单地在内部编写ى而不是\xDB\x8C,它们在PHP中完全是相同的字符串,但是如果您需要共享代码,那么依赖IDE编写的内容的可读性通常不好

既然你已经澄清了你的问题,我上面的回答就不再合适了。我把它放在那里,作为其他过路人的参考


你的问题可能源于这样一个事实:阅读时,如果使用Unicode字符U+0654(上面的非空格标记阿拉伯语字母hamsa)进行修改,似乎ي会丢失下面的点。由于我的浏览器没有删除点,而是添加了hamsa,我不知道当点消失时hamsa是否也应该消失。无论如何,可能是\xDB\x8C与\xD9\x8A\xD9\x94具有相同的外观。我无法找到相反的字符,即下面的双点作为非间隔修改字符,这可以解释为什么substr\u count$str、\xDB\x8c也能找到阿拉伯语yeh,但它可能存在。

我尝试过这个例子,效果很好:

$str="مىمى";
$count = substr_count($str, "ى");
echo $count;
我得到了答案2,这是真的


如果你想得到更具体的答案,你应该在问题中提供更具体的细节。

你应该从一开始就写下所有这些。。。无论如何,如果U+064A的ي是\xD9\x8A UTF-8,那么您写的substr_count$str\xDB\x8c是不可能的。字符串的编码是什么?你是否有mbstring活动,函数重载错误的术语,但这是他们使用的启用?如果你有一个文本文件,并能够做一个od-tx1z的一行的问题,也许我们可以了解多一点。顺便说一句,我上面写的关于不可能的事情不一定100%正确,请阅读我的答案。