猿问

将波斯语转换为英语数字问题

我正在将波斯语转换为英语/数字,但我遇到了两个不同数组的问题。具有相同的功能,但输出不同。


function convertNumbers($number)

{

   $arr2 = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']; // Converting


   $arr1 = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩']; // Not converting


   $num = range(0, 9);


   $englishNumber[0] = str_replace($arr1, $num, $number);


   $englishNumber[1] = str_replace($arr2, $num, $number);


   return $englishNumber;

}


print_r(convertNumbers('۹۰'));

输出:数组([0] => 90 [1] => 90)


$arr2工作正常但不是$arr1。看起来 4 和 6 在上述两个声明的数组中以及从左到右的排列方式不同,反之亦然。任何建议。


莫回无
浏览 128回答 3
3回答

哈士奇WWW

$arr2似乎包含波斯数字,$arr1似乎包含阿拉伯数字。这意味着第一个数组中的第二个数组٠不一样۰,尽管形状相似。为确保它们不同,您可以运行bin2hex():foreach ($arr2 as $key => $value) {   echo $key, ': ', bin2hex($value), ' - ', bin2hex($arr1[$key]), "\n";}输出:0: dbb0 - d9a01: dbb1 - d9a12: dbb2 - d9a23: dbb3 - d9a34: dbb4 - d9a45: dbb5 - d9a56: dbb6 - d9a67: dbb7 - d9a78: dbb8 - d9a89: dbb9 - d9a9

明月笑刀无情

数组 $ arr1 和 $ arr2 包含不同的字符。转换为 unicode 后可见。$arr1 = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩']; $arr2 = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']; $arr1 包含字符 ARABIC-INDIC DIGIT ZERO .. ARABIC-INDIC DIGIT NINE\u{660}\u{661}\u{662}\u{663}\u{664}\u{665}\u{666}\u{667}\u{668}\u{669}和 $arr2 扩展阿拉伯-印度数字零..扩展阿拉伯-印度数字九\u{6f0}\u{6f1}\u{6f2}\u{6f3}\u{6f4}\u{6f5}\u{6f6}\u{6f7}\u{6f8}\u{6f9}我认为使用哪个数组取决于写入方向。但我不是语言专家。补充说明:这个用双引号括起来的 Unicode 序列可以在 PHP 源代码中使用,输出是这个代码点的 UTF-8 表示。  $persNum = [ //"۰" .. "۹"    "\u{6f0}","\u{6f1}","\u{6f2}","\u{6f3}","\u{6f4}",    "\u{6f5}","\u{6f6}","\u{6f7}","\u{6f8}","\u{6f9}"  ];现在不能混淆具有相同形状的字符。

ibeautiful

那是因为您使用了 2 种不同的编码。就像您有一个从 A 到 C 的数组,以及另一个从 D 到 F 的数组,并且将每个 AC 更改为一个数字 - 不会更改第二个数组的任何内容。在您的示例中:function convertNumbers($number){   $arr2 = ['A', 'B', 'C']; // Converting   $arr1 = ['F', 'E', 'D']; // Not converting   $num = range(0, 2);   $englishNumber[0] = str_replace($arr1, $num, $number);   $englishNumber[1] = str_replace($arr2, $num, $number);   return $englishNumber;}print_r(convertNumbers('AC'));将始终更改 AC,但永远不会更改 DF。array(0 => "02", 1 => "DF")长话短说,输入参数的字母在逻辑上是不同的,即使它们看起来相同,并且 str_replace 在 array1 中找不到相同的字符串。其中一个是波斯语,另一个是阿拉伯语,但您只检查其中一个的输出。(有趣的是:它们被称为阿拉伯数字,而不是英文数字。:P)
随时随地看视频慕课网APP
我要回答