Skip to content

Commit cc781b9

Browse files
ext/mbstring: Update to Unicode 18.0 (#23755)
* ext/mbstring: Update to Unicode 18.0 Previously: - #15898 - 0fdffc1 - #7502 - #14680 * Update NEWS and UPGRADING
1 parent d975bbb commit cc781b9

5 files changed

Lines changed: 3774 additions & 3621 deletions

File tree

‎NEWS‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ PHP NEWS
4040
- MBString:
4141
. Fixed bug GH-23106 (mb_strpos() reads past the end of a haystack ending in
4242
a truncated UTF-8 sequence). (Lazizbek Ergashev)
43+
. Updated Unicode data tables to Unicode 18.0 (Yuya Hamada)
4344

4445
- PDO:
4546
. Fixed PDOStatement::getColumnMeta() reading out of bounds for an invalid

‎UPGRADING‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ PHP 8.6 UPGRADE NOTES
9999
intl.use_exceptions enabled, these failures throw IntlException. Previously,
100100
these paths emitted a warning and compared the value as an empty string.
101101

102+
- MBstring:
103+
. Unicode data tables have been updated to Unicode 18.0
104+
102105
- PCNTL:
103106
. pcntl_alarm() now raises a ValueError if the seconds argument is
104107
lower than zero or greater than the platform's UINT_MAX.

‎ext/mbstring/libmbfl/mbfl/eaw_table.h‎

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,24 +81,27 @@ static const struct {
8181
{ 0xffe0, 0xffe6 },
8282
{ 0x16fe0, 0x16fe4 },
8383
{ 0x16ff0, 0x16ff6 },
84-
{ 0x17000, 0x18cd5 },
85-
{ 0x18cff, 0x18d1e },
84+
{ 0x17000, 0x18cda },
85+
{ 0x18cff, 0x18d20 },
8686
{ 0x18d80, 0x18df2 },
87+
{ 0x18e00, 0x19191 },
88+
{ 0x191a0, 0x191d2 },
8789
{ 0x1aff0, 0x1aff3 },
8890
{ 0x1aff5, 0x1affb },
8991
{ 0x1affd, 0x1affe },
90-
{ 0x1b000, 0x1b122 },
92+
{ 0x1b000, 0x1b128 },
9193
{ 0x1b132, 0x1b132 },
9294
{ 0x1b150, 0x1b152 },
9395
{ 0x1b155, 0x1b155 },
94-
{ 0x1b164, 0x1b167 },
96+
{ 0x1b164, 0x1b168 },
9597
{ 0x1b170, 0x1b2fb },
9698
{ 0x1d300, 0x1d356 },
9799
{ 0x1d360, 0x1d376 },
98100
{ 0x1f004, 0x1f004 },
99101
{ 0x1f0cf, 0x1f0cf },
100102
{ 0x1f18e, 0x1f18e },
101103
{ 0x1f191, 0x1f19a },
104+
{ 0x1f1ae, 0x1f1ae },
102105
{ 0x1f200, 0x1f202 },
103106
{ 0x1f210, 0x1f23b },
104107
{ 0x1f240, 0x1f248 },
@@ -125,22 +128,22 @@ static const struct {
125128
{ 0x1f680, 0x1f6c5 },
126129
{ 0x1f6cc, 0x1f6cc },
127130
{ 0x1f6d0, 0x1f6d2 },
128-
{ 0x1f6d5, 0x1f6d8 },
131+
{ 0x1f6d5, 0x1f6d9 },
129132
{ 0x1f6dc, 0x1f6df },
130133
{ 0x1f6eb, 0x1f6ec },
131134
{ 0x1f6f4, 0x1f6fc },
135+
{ 0x1f7da, 0x1f7da },
132136
{ 0x1f7e0, 0x1f7eb },
133137
{ 0x1f7f0, 0x1f7f0 },
134138
{ 0x1f90c, 0x1f93a },
135139
{ 0x1f93c, 0x1f945 },
136140
{ 0x1f947, 0x1f9ff },
137141
{ 0x1fa70, 0x1fa7c },
138-
{ 0x1fa80, 0x1fa8a },
139-
{ 0x1fa8e, 0x1fac6 },
142+
{ 0x1fa80, 0x1fac6 },
140143
{ 0x1fac8, 0x1fac8 },
141-
{ 0x1facd, 0x1fadc },
142-
{ 0x1fadf, 0x1faea },
143-
{ 0x1faef, 0x1faf8 },
144+
{ 0x1facc, 0x1fadd },
145+
{ 0x1fadf, 0x1faeb },
146+
{ 0x1faef, 0x1fafa },
144147
{ 0x20000, 0x2fffd },
145148
{ 0x30000, 0x3fffd },
146149
};

‎ext/mbstring/tests/unicode_versions.phpt‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ print "Emoji (\u{2630}): " . mb_strwidth("\u{2630}", 'UTF-8') . "\n";
2626
// New in Unicode 17.0, width=2
2727
print "Emoji (\u{1FAEA}): " . mb_strwidth("\u{1FAEA}", "UTF-8") . "\n";
2828

29+
// New in Unicode 18.0, width=2
30+
print "RUFIYAA SIGN (\u{20C2}): " . mb_strwidth("\u{20C2}", "UTF-8") . "\n";
31+
print "CJK Unified Ideograph-2B81E (\u{2B81E}): " . mb_strwidth("\u{2B81E}", "UTF-8") . "\n";
32+
print "Emoji (\u{1FAEB}): " . mb_strwidth("\u{1FAEB}", "UTF-8") . "\n";
33+
2934
echo "Char case changes:\n";
3035

3136
print "Upper(\u{019b}) = \u{a7dc} : ";
@@ -41,5 +46,8 @@ Emoji (🐘): 2
4146
Emoji (🛜): 2
4247
Emoji (☰): 2
4348
Emoji (🫪): 2
49+
RUFIYAA SIGN (⃂): 1
50+
CJK Unified Ideograph-2B81E (𫠞): 2
51+
Emoji (🫫): 2
4452
Char case changes:
4553
Upper(ƛ) = Ƛ : bool(true)

0 commit comments

Comments
 (0)