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()
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
mb_strwidth — Return width of string
$str
[, string $encoding = mb_internal_encoding()
] )
Returns the width of string str.
Multi-byte characters are usually twice the width of single byte characters.
| Chars | Width |
|---|---|
| U+0000 - U+0019 | 0 |
| U+0020 - U+1FFF | 1 |
| U+2000 - U+FF60 | 2 |
| U+FF61 - U+FF9F | 1 |
| U+FFA0 - | 2 |
strThe string being decoded.
encodingThe encoding
parameter is the character encoding. If it is omitted, the internal character
encoding value will be used.
The width of string str.
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()
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.)
to convert a multi-byte character into hex strings:
$b = "現,市民派利市的習慣亦有所改變";
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 );
}
to convert a multi-byte character into hex strings:
<?php
$b = "現,市民派利市的習慣亦有所改變";
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, $i, 1, '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 => '現' |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 => '慣' |hex=e685a3
width=3 => '亦' |hex=e4baa6
width=3 => '有' |hex=e69c89
width=3 => '所' |hex=e68980
width=3 => '改' |hex=e694b9
width=3 => '變' |hex=e8ae8a