0

有一个函数可以将英语标准数字转换为波斯语(波斯语)或阿拉伯语数字:

function farsinum($str){
  if (strlen($str) == 1){
    $str = "0".$str;
    $out = "";
    for ($i = 0; $i < strlen($str); ++$i) {
      $c = substr($str, $i, 1); 
      $out .= pack("C*", 0xDB, 0xB0 + $c);
    }
  }
  return $out;
}

但是这个函数产生01 02 03 ... 而不是1 2 3 ... 我认为这里必须改变一些东西:

$out .= pack("C*", 0xDB, 0xB0 + $c);

任何帮助表示赞赏。

4

1 回答 1

1

此函数将转换单个数字:

function farsinum ($digit) {
  return pack("C*", 0xDB, 0xB0 + substr($digit, 0, 1));
}

如果你想转换一个大于 9 的数字,一个简单的循环将解决这个问题:

function farsinum ($number) {

  // Work with a string so we can use index access
  $number = (string) $number;

  // We'd better add some error checking, to make sure we only accept digits
  if (!ctype_digit($number)) return FALSE;

  // Loop characters and convert them
  for ($i = 0, $out = '', $length = strlen($number); $i < $length; $i++) {
    $out .= pack("C*", 0xDB, 0xB0 + $number[$i]);
  }

  // Return the result
  return $out;

}

我找不到资源来解释负数和浮点数如何在波斯语文本中表示,如果您需要这样做,请告诉我您希望输出的外观,我会试一试。

于 2012-05-23T11:57:20.757 回答