gpt4 book ai didi

php - 如何在 PHP 上使用 substr_count 计算阿拉伯语子字符串

转载 作者:行者123 更新时间:2023-11-29 12:39:31 25 4
gpt4 key购买 nike

我正在尝试计算存储在 utf8mb4_bin 上的 MySQL DB 文本集中的一组阿拉伯语子字符串。这php 文件也设置为 utf-8,因此单词实际上可以正确显示。

到目前为止,我可以计算除阿拉伯语之外的任何语言的任何子字符串(日语、韩语、泰语、英语等......工作正常),但无法让阿拉伯语工作。

mysqli_query($conn, "SET NAMES utf8mb4");
$query_main = mysqli_query($conn, "SELECT word FROM lang_dicc WHERE lang = ".$lang." ORDER BY value;");

while ($query = mysqli_fetch_assoc($query_main) ){
$vector_1[$i] = mb_substr_count( $text, $query["word"]);
}

我已经将 php.ini 文件设置为:
mbstring.func_overload = 7

我很困惑,因为 strpos() 实际上可以找到子字符串...

我疯狂猜测是不是写反了?我对此完全迷失了。特别是因为我看不懂这些单词,我不知道它们是否是倒着的。

如果对此有任何见解,我将不胜感激。

-谢谢

最佳答案

我最近在阿拉伯语方面遇到了类似的问题,根据我的简短研究,我可以看到它在任何地方都没有得到解释,因此,无论很久以前就有人问过这个答案,我都会把这个答案留在这里。

简短回答
我们可以使用

iconv_strlen("نص بالعربي");

解释为什么普通的 substr/strlen 不起作用,是因为每个阿拉伯字母被计为两个字节。例如,

print("نص بالعربي" . ": " . strlen("نص بالعربي"));
print("نص بالعربي" . ": " . iconv_strlen("نص بالعربي"));

这些将输出
年龄: 19
人数:10

普通的 strlen 计算字节数。该字符串有 9 个阿拉伯字符和 1 个空格。 92 + 11 = 19。

第二个输出了 10,因为它计算的是字符而不是字节。

与 substr 相关的奇怪行为
打印阿拉伯字符串效果很好。但是,打印字符串的字母将导致打印问号。

// substr( string, startIndex, Length);
$name = "محمد";
print($name);
print($name[0]);
print(substr($name, 0, 1));
print(substr($name, 0, 2));

输出:
嗯嗯



在提取字符串的一部分时,可以使用以下方法来代替乘二或除二

// mb_substr( string, startIndex, Length);

关于php - 如何在 PHP 上使用 substr_count 计算阿拉伯语子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26313270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com