2014-12-06 64 views
-1

我有这样的功能:如何计算包含utf8字符的字符串中的阿拉伯数字与PHP?

function str_split_unicode($str, $l = 0) { 
    if ($l > 0) { 
     $ret = array(); 
     $len = mb_strlen($str, "UTF-8"); 
     for ($i = 0; $i < $len; $i += $l) { 
      $ret[] = mb_substr($str, $i, $l, "UTF-8"); 
     } 
     return $ret; 
    } 
    return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY); 
} 

当我执行这样的:

$arr = str_split_unicode('你好,我将于2014年11月11日变成霸王龙,这非常的好看呢!一二三四五六七八九!', 21); 
echo '<pre>';print_r($arr); 

结果是:

Array 
(
    [0] => 你好,我将于2014年11月11日变成霸王 
    [1] => 龙,这非常的好看呢!一二三四五六七八九! 
) 

这不是我想要的。由于1的阿拉伯数字为1,所以我希望将2个阿拉伯数字计为1,我怎么能做到这一点?

+0

如果这是实现统一的块布局,反正这是错误的。它最终取决于用于呈现数字的字体;即使每个汉字字符使用2个数字,仍然不能保证它们会很好地排列。 – deceze 2014-12-06 10:15:40

回答

0

我的肢体这里走出去,就会想,你实际上是试图实现均匀的块布局中的所有字符列排队。为此,你应该宁愿使用全角数字(“禅阁”),而不是试图与它们对齐2比1:

echo mb_convert_kana('你好,我将于2014年11月11日变成霸王龙...', 'AS', 'UTF-8'); 

http://php.net/mb_convert_kana

0

我想你想要的字符串中的数字的数量 这可能是答案?

$str = '你好,我将于2014年11月11日变成霸王龙,这非常的好看呢!一二三四五六七八九!'; 
preg_match_all("/\d+/", $str, $output_array); 
echo count($output_array[0]); //number of digits in a string. in this case 3