如何在阿拉伯语中使用类似的文本PHP代码

时间:2015-06-23 12:22:15

标签: php string function

尝试将php similar_text()与阿拉伯语一起使用,但它不起作用。 然而,它适用于英语。

<?php 
$var = similar_text("ياسر","عمار","$per");
echo $var;
?>
outbot : 5 

这是错误的结果,它应该是2. similar_text()是否有阿拉伯字母?

3 个答案:

答案 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