文字

mb_strwidth

(PHP 4 >= 4.0.6, PHP 5)

mb_strwidth返回字符串的宽度

说明

int mb_strwidth ( string $str [, string $encoding = mb_internal_encoding() ] )

返回 string 类型 str 的宽度。

多字节字符通常是单字节字符的两倍宽度。

字符宽度
字符 宽度
U+0000 - U+0019 0
U+0020 - U+1FFF 1
U+2000 - U+FF60 2
U+FF61 - U+FF9F 1
U+FFA0 - 2

参数

str

待解码的 string

encoding

encoding 参数为字符编码。如果省略,则使用内部字符编码。

返回值

string str 的宽度。

参见

  • mb_strimwidth() - 获取按指定宽度截断的字符串
  • mb_internal_encoding() - 设置/获取内部字符编码

用户评论:

[#1] Adam Altman [2014-01-15 15:51:59]

Important, if you're looking to trim/cut/truncate a string so that it will fit a certain byte size (for example to fit in a database field), look at:  mb_strcut()

[#2] chiangtor at gmail dot com [2013-09-13 03:30:20]

to convert a multi-byte character into hex strings:
     <?php
        $b 
"?F???????????е????T?????????";
        
printf("length of string: %d \n"mb_strlen($b'UTF-8'));
        for (
$i=0$i mb_strlen($b'UTF-8'); $i++){
            
$ch mb_substr($b$i1'UTF-8');
            
$chlen strlen($ch);
            
$hexs '';
            for (
$j=0$j $chlen$j++)
                
$hexs $hexs sprintf("%x"ord($ch[$j]));
            
printf ("width=%d => '%s' |hex=%s\n"$chlen$ch$hexs );
        }
    
?>
    

width=3 => '?F' |hex=e78fbe
width=3 => '??' |hex=efbc8c
width=3 => '??' |hex=e5b882
width=3 => '??' |hex=e6b091
width=3 => '??' |hex=e6b4be
width=3 => '??' |hex=e588a9
width=3 => '??' |hex=e5b882
width=3 => '??' |hex=e79a84
width=3 => '??' |hex=e7bf92
width=3 => '?T' |hex=e685a3
width=3 => '??' |hex=e4baa6
width=3 => '??' |hex=e69c89
width=3 => '??' |hex=e68980
width=3 => '??' |hex=e694b9
width=3 => '?' |hex=e8ae8a

[#3] larry1chan at gmail dot com [2008-02-06 22:38:59]

to convert a multi-byte character into hex strings:

$b = "?F???????????е????T?????????";

printf("length of string: %d <br>", mb_strlen($b, 'UTF-8'));
for ($i=0; $i < mb_strlen($b, 'UTF-8'); $i++){
$ch = mb_substr($b, $i, 1, 'UTF-8');
$chlen = mb_strwidth($ch, 'UTF-8');
$hexs = '';
for ($j=0; $j < $chlen; $j++)
$hexs = $hexs . sprintf("%x", ord($ch[$j]));
printf ("width=%d => '%s' |hex=%s<br>", $chlen, $ch, $hexs );


}

[#4] Anonymous [2007-10-31 16:27:28]

Note: mb_strwidth is NOT returning bytes.  It's returning the width of monotype characters.  (In some languages, some characters will take up 2 character widths if displayed in monotype.)

上一篇: 下一篇: