尝试将php similar_text()
与阿拉伯语一起使用,但它不起作用。
然而,它适用于英语。
<?php
$var = similar_text("ياسر","عمار","$per");
echo $var;
?>
outbot : 5
这是错误的结果,它应该是2. similar_text()
是否有阿拉伯字母?
答案 0 :(得分:1)
只是为了记录并希望能够提供一些帮助,我想澄清一些多字节字符串给出时this doc
函数的行为(包括字符串)阿拉伯语。)
该函数只是将输入字符串的每个字节视为单个字符(这意味着它既不支持多字节字符也不支持Unicode。)
عمار
和ياسر
字符串的字节流分别表示如下(字节(十六进制表示)使用.
分隔,并且其中a的结尾达到了字符,然后使用了:
:
06.39:06.45:06.27:06.31 <-- Byte stream for عمار
|| || || || ||
06.4A:06.27:06.33:06.31 <-- Byte stream for ياسر
正如你所知,有五个匹配,这就是函数在这种情况下返回5
的原因(每两个十六进制数字代表一个字节。)
答案 1 :(得分:1)
这是我正在使用的
//from http://www.phperz.com/article/14/1029/31806.html
function mb_split_str($str) {
preg_match_all("/./u", $str, $arr);
return $arr[0];
}
//based on http://www.phperz.com/article/14/1029/31806.html, added percent
function mb_similar_text($str1, $str2, &$percent) {
$arr_1 = array_unique(mb_split_str($str1));
$arr_2 = array_unique(mb_split_str($str2));
$similarity = count($arr_2) - count(array_diff($arr_2, $arr_1));
$percent = ($similarity * 200) / (strlen($str1) + strlen($str2) );
return $similarity;
}
所以
$var = mb_similar_text('عمار', 'ياسر', $per);
output: $var = 2, $per = 25
答案 2 :(得分:0)
因为阿拉伯文本是多字节字符串,所以不能使用普通的PHP函数(例如'similar_text()')。
echo(strlen("عمار"));
以上代码输出:8
echo(mb_strlen("عمار", "UTF-8"));
使用指定了UTF-8编码的mb_strlen函数,输出为:4(正确的字符数)。
您可以使用mb_函数制作您自己的similar_text函数版本:http://php.net/manual/en/ref.mbstring.php