Bug #81584 [Com]: mb_strwidth() returns incorrect value
Edit report at https://bugs.php.net/bug.php?id=81584&edit=1
ID: 81584
Comment by: azjezz at protonmail dot com
Reported by: azjezz at protonmail dot com
Summary: mb_strwidth() returns incorrect value
Status: Analyzed
Type: Bug
Package: mbstring related
Operating System: N/A
PHP Version: 8.1.0RC5
Assigned To: alexdowad
Block user comment: N
Private report: N
New Comment:
Hey Alex, Thank you for taking a look at this.
personally i don't have a preference, i encountered this while upgrading one of my packages to
PHP 8.1 ( ref: https://github.com/azjezz/psl/pull/246 ), and was
advised to report it here on R13.
If you think this is not a bug, you can mark it as resolved :)
Thanks again!
Previous Comments:
------------------------------------------------------------------------
[2021-11-01 19:32:04] alexdowad@php.net
Azjezz, thanks for the report!
First of all, the Unicode Consortium maintains the standard on which Unicode characters are
considered 'halfwidth' and which are 'fullwidth'. See: http://www.unicode.org/reports/tr11/
If you download all the data tables for the Unicode standard from unicode.org, you can see the raw
data on character width in the file EastAsianWidth.txt.
In the first example you kindly provided, the coffee cup emoji are U+2615. The latest version of the
Unicode standard indicates these are 'fullwidth' characters. Plus 2 for the spaces, the
output of 8 is therefore correct.
Likewise, the gold, silver, and bronze medal emoji are all fullwidth. So 6 is the correct output.
And as for the horoscope symbols... yep, they are also fullwidth.
In summary, the latest version of PHP complies with the latest Unicode standard, and the previous
version of PHP did not. Now, I would like to find out... is this causing a problem for you? Is there
some reason why you preferred the old Unicode standard to the new one? Looking forward to your
feedback.
------------------------------------------------------------------------
[2021-11-01 17:44:12] nikic@php.net
Possibly due to https://github.com/php/php-src/commit/d8c785b894e1a4ed9793d71cad02330cb0034faa?
------------------------------------------------------------------------
[2021-11-01 17:19:24] azjezz at protonmail dot com
test script: https://3v4l.org/X6DWb
------------------------------------------------------------------------
[2021-11-01 17:17:33] azjezz at protonmail dot com
Description:
------------
The "width" or a string containing emojis has changed between PHP <= 8.0 and 8.1.
Test script:
---------------
var_dump(
mb_strwidth('â â â'),
mb_strwidth('????????????'),
mb_strwidth('ââââââââââââ'),
);
Expected result:
----------------
int(5)
int(3)
int(12)
Actual result:
--------------
int(8)
int(6)
int(24)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=81584&edit=1
Thread (6 messages)