]> granicus.if.org Git - php/commitdiff
Another fix for bug #69267
authorNikita Popov <nikita.ppv@gmail.com>
Sun, 23 Jul 2017 13:00:26 +0000 (15:00 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Sun, 23 Jul 2017 13:07:02 +0000 (15:07 +0200)
mb_strtoupper() was converting lowercase characters into
titlecase characters, instead of uppercase characters. Luckily
there are only very few characters with a distinct titlecase
representation, so this mostly worked out okay...

ext/mbstring/php_unicode.c
ext/mbstring/tests/bug69267.phpt

index 9771289cd0f0a742f756df3975354dd0f24da488..485988fe35d91d57a6cce471daa2fc899d653c68 100644 (file)
@@ -173,7 +173,7 @@ MBSTRING_API unsigned long php_unicode_toupper(unsigned long code, enum mbfl_no_
                /*
                 * The character is lower case.
                 */
-               field = 2;
+               field = 1;
                l = _uccase_len[0];
                r = (l + _uccase_len[1]) - 1;
 
index c00e5e129ae88e2e88ee589bfb9fd270523d6fe1..8d429411ac57a295468598ae660ba59d360da3dc 100644 (file)
@@ -2,8 +2,26 @@
 Bug #69267: mb_strtolower fails on titlecase characters
 --FILE--
 <?php
-$str = "DžLjNjDz";
-var_dump(mb_strtolower($str));
+$str_l = "džljnjdz";
+$str_u = "DŽLJNJDZ";
+$str_t = "DžLjNjDz";
+var_dump(mb_strtolower($str_l));
+var_dump(mb_strtolower($str_u));
+var_dump(mb_strtolower($str_t));
+var_dump(mb_strtoupper($str_l));
+var_dump(mb_strtoupper($str_u));
+var_dump(mb_strtoupper($str_t));
+var_dump(mb_convert_case($str_l, MB_CASE_TITLE));
+var_dump(mb_convert_case($str_u, MB_CASE_TITLE));
+var_dump(mb_convert_case($str_t, MB_CASE_TITLE));
 ?>
 --EXPECT--
 string(8) "džljnjdz"
+string(8) "džljnjdz"
+string(8) "džljnjdz"
+string(8) "DŽLJNJDZ"
+string(8) "DŽLJNJDZ"
+string(8) "DŽLJNJDZ"
+string(8) "Džljnjdz"
+string(8) "Džljnjdz"
+string(8) "Džljnjdz"