php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #47742 mb_strtoupper() and mb_strtolower() failure cases
Submitted: 2009-03-21 17:42 UTC Modified: 2009-05-20 01:00 UTC
Votes:2
Avg. Score:4.5 ± 0.5
Reproduced:2 of 2 (100.0%)
Same Version:1 (50.0%)
Same OS:2 (100.0%)
From: fsb at thefsb dot org Assigned: fb-req-jani (profile)
Status: No Feedback Package: mbstring related
PHP Version: 5.2.9 OS: os x
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2009-03-21 17:42 UTC] fsb at thefsb dot org
Description:
------------
In some alphabets including greek, mb_strtoupper and mb_strtolower fail 
on strings that mb_convert_case handles ok.

Reproduce code:
---------------
<?php
	$strs = array(
		'החמאס: רוצים להשלים את עסקת שליט במהירות האפשרית',
		'ايران لا ترى تغييرا في الموقف الأمريكي',
		'独・米で死傷者を出した銃の乱射事件',
		'國會預算處公布驚人的赤字數據後',
		'이며 세계 경제 회복에 걸림돌이 되고 있다',
		'В дагестанском лесном массиве южнее села Какашура',
		'นายประสิทธิ์ รุ่งสะอาด ปลัดเทศบาล รักษาการแทนนายกเทศมนตรี ต.ท่าทองใหม่',
		'ભારતીય ટીમનો સુવર્ણ યુગ : કિવીઝમાં પણ કમાલ',
		'ཁམས་དཀར་མཛེས་ས་ཁུལ་དུ་རྒྱ་གཞུང་ལ་ཞི་བའི་ངོ་རྒོལ་',
		'Χιόνια, βροχές και θυελλώδεις άνεμοι συνθέτουν το',
		'Հայաստանում սկսվել է դատական համակարգի ձեւավորումը',
		'რუსეთი ასევე გეგმავს სამხედრო');
	foreach ($strs as $s) {
		print("\n$s\n");
		print(($s = mb_strtoupper($s)) . "\n"); // cf: print(($s = mb_convert_case($s, MB_CASE_UPPER, "UTF-8")) . "\n");
		print(($s = mb_strtolower($s)) . "\n"); // cf: print(($s = mb_convert_case($s, MB_CASE_LOWER, "UTF-8")) . "\n");
	}
?>

Expected result:
----------------
החמאס: רוצים להשלים את עסקת שליט במהירות האפשרית
החמאס: רוצים להשלים את עסקת שליט במהירות האפשרית
החמאס: רוצים להשלים את עסקת שליט במהירות האפשרית

ايران لا ترى تغييرا في الموقف الأمريكي
ايران لا ترى تغييرا في الموقف الأمريكي
ايران لا ترى تغييرا في الموقف الأمريكي

独・米で死傷者を出した銃の乱射事件
独・米で死傷者を出した銃の乱射事件
独・米で死傷者を出した銃の乱射事件

國會預算處公布驚人的赤字數據後
國會預算處公布驚人的赤字數據後
國會預算處公布驚人的赤字數據後

이며 세계 경제 회복에 걸림돌이 되고 있다
이며 세계 경제 회복에 걸림돌이 되고 있다
이며 세계 경제 회복에 걸림돌이 되고 있다

В дагестанском лесном массиве южнее села Какашура
В ДАГЕСТАНСКОМ ЛЕСНОМ МАССИВЕ ЮЖНЕЕ СЕЛА КАКАШУРА
в дагестанском лесном массиве южнее села какашура

นายประสิทธิ์ รุ่งสะอาด ปลัดเทศบาล รักษาการแทนนายกเทศมนตรี ต.ท่าทองใหม่
นายประสิทธิ์ รุ่งสะอาด ปลัดเทศบาล รักษาการแทนนายกเทศมนตรี ต.ท่าทองใหม่
นายประสิทธิ์ รุ่งสะอาด ปลัดเทศบาล รักษาการแทนนายกเทศมนตรี ต.ท่าทองใหม่

ભારતીય ટીમનો સુવર્ણ યુગ : કિવીઝમાં પણ કમાલ
ભારતીય ટીમનો સુવર્ણ યુગ : કિવીઝમાં પણ કમાલ
ભારતીય ટીમનો સુવર્ણ યુગ : કિવીઝમાં પણ કમાલ

ཁམས་དཀར་མཛེས་ས་ཁུལ་དུ་རྒྱ་གཞུང་ལ་ཞི་བའི་ངོ་རྒོལ་
ཁམས་དཀར་མཛེས་ས་ཁུལ་དུ་རྒྱ་གཞུང་ལ་ཞི་བའི་ངོ་རྒོལ་
ཁམས་དཀར་མཛེས་ས་ཁུལ་དུ་རྒྱ་གཞུང་ལ་ཞི་བའི་ངོ་རྒོལ་

Χιόνια, βροχές και θυελλώδεις άνεμοι συνθέτουν το
ΧΙΌΝΙΑ, ΒΡΟΧΈΣ ΚΑΙ ΘΥΕΛΛΏΔΕΙΣ ΆΝΕΜΟΙ ΣΥΝΘΈΤΟΥΝ ΤΟ
χιόνια, βροχέσ και θυελλώδεισ άνεμοι συνθέτουν το

Հայաստանում սկսվել է դատական համակարգի ձեւավորումը
ՀԱՅԱՍՏԱՆՈՒՄ ՍԿՍՎԵԼ Է ԴԱՏԱԿԱՆ ՀԱՄԱԿԱՐԳԻ ՁԵՒԱՎՈՐՈՒՄԸ
հայաստանում սկսվել է դատական համակարգի ձեւավորումը

რუსეთი ასევე გეგმავს სამხედრო
რუსეთი ასევე გეგმავს სამხედრო
რუსეთი ასევე გეგმავს სამხედრო






Actual result:
--------------
החמאס: רוצים להשלים את עסקת שליט במהירות האפשרית
החמאס: רוצים להשלים את עסקת שליט במהירות האפשרית
החמאס: רוצים להשלים את עסקת שליט במהירות האפשרית

ايران لا ترى تغييرا في الموقف الأمريكي
ايران لا ترى تغييرا في الموقف الأمريكي
?????????? ???? ?????? ???????????? ???? ???????????? ????????????????

独・米で死傷者を出した銃の乱射事件
Nj?Ã?DZ?Á?ƭ?ł?Ȁ?Â?Ň?Á?Á?Ɋ?Á?Ĺ?Ű?ĺ?Ļ?
独・米で死傷者を出した銃の乱射事件

國會預算處公布驚人的赤字數據後
Ŝ?Ɯ?ɠ?Ǯ?ș?Ņ?Ÿ?ɩ?ĺ?ǚ????ŭ?ƕ?Ɠ?ž?
國會預算處公布驚人的???字數據後

이며 세계 경제 회복에 걸림돌이 되고 있다
̝?˩? ̄?ʳ? ʲ?̠? ͚?˳?̗? ʱ?˦?ˏ?̝? ː?ʳ? ̞?ˋ?
이며 세계 경제 회??에 걸림돌이 되고 있다

В дагестанском лесном массиве южнее села Какашура
В даг??станском л??сном массив?? южн???? с??ла Какашура
? ????????????? ??????? ???????? ??????? ????? ????????

นายประสิทธิ์ รุ่งสะอาด ปลัดเทศบาล รักษาการแทนนายกเทศมนตรี ต.ท่าทองใหม่
???????????????????????????????????? ??????????????????????????? ?????
????????????????????????? ????????????????????????????????????????????
????????????????????????? ???.??????????????????????????????
นายประสิทธิ์ รุ่งสะอาด ปลัดเทศบาล รักษาการแทนนายกเทศมนตร?? ต.ท่าทองใหม่

ભારતીય ટીમનો સુવર્ણ યુગ : કિવીઝમાં પણ કમાલ
?????????????????? ??????????????? ?????????????????? ????????? : ????
???????????????????? ?????? ????????????
ભારતીય ટીમનો સુ??ર્ણ યુગ : કિ??ીઝમાં પણ કમાલ

ཁམས་དཀར་མཛེས་ས་ཁུལ་དུ་རྒྱ་གཞུང་ལ་ཞི་བའི་ངོ་རྒོལ་
??????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????
????
ཁམས་དཀར་མཛེས་ས་ཁུལ་དུ་རྒྱ་གཞུང་ལ་ཞི་བའི་ངོ་རྒོལ་

Χιόνια, βροχές και θυελλώδεις άνεμοι συνθέτουν το
Χιόνια, βροχές και θυ??λλώδ??ις άν??μοι συνθέτουν το
??????, ?????? ??? ???????????? ??????? ????????? ??

Հայաստանում սկսվել է դատական համակարգի ձեւավորումը
Հա??աստանում սկսվել է դատական համակարգի ձեւավորումը
?????????????????????? ???????????? ?? ?????????????? ????????????????
?? ??????????????????????

რუსეთი ასევე გეგმავს სამხედრო
?????????????????? ??????????????? ????????????????????? ?????????????
???????????
რუსეთი ასევე გეგმავს სამხედრო






Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-05-04 18:46 UTC] jani@php.net
Please provide a bit shorter example script. Or does the bug only appear 
with such long strings..?
 [2009-05-04 19:02 UTC] fsb at thefsb dot org
<?php
  $s = '이며 세계';
  print(phpversion() . "\n");
  print("1: $s\n");
  print('2: '. ($s = mb_strtoupper($s)) . "\n");
  print('3'. ($s = mb_convert_case($s, MB_CASE_UPPER, "UTF-8")) . 
"\n");
  print('4: '. ($s = mb_strtolower($s)) . "\n");
  print('5: '. ($s = mb_convert_case($s, MB_CASE_LOWER, "UTF-8")) . 
"\n");
?>

 ./php -f test2.php 
5.2.10-dev
1: 이며 세계
2: ̝?˩? ̄?ʳ?
3̝˩ ̄ʳ
4: ?? ??
5:  

expected output:
1: 이며 세계
2: 이며 세계
3: 이며 세계
4: 이며 세계
5: 이며 세계
 [2009-05-05 02:02 UTC] jani@php.net
One last question: What is the charset you used? I don't see any greek 
chars anywhere.. ;)
 [2009-05-05 11:37 UTC] fsb at thefsb dot org
in both test scripts i provided yesterday, the character set is unicode 
and the encoding is utf-8.

in the short test script that i provided 4 May 7:02pm UTC, there is only 
one short Hangul test string and no Greek, as you said.

in the longer test script i provided at 4 May 5:00pm UTC, several 
alphabets are used including Greek, Cyrillic, Hebrew, Arabic, Thai, 
Kanji, ...

in case it makes life easier for you, i put the longer test script on a 
web server: http://tomworster.net/test.php.gz  it's only 1kbyte.
 [2009-05-06 21:07 UTC] jani@php.net
This script:
<?php
$s = '&#935;&#953;&#972;&#957;&#953;&#945;, &#946;&#961;&#959;&#967;&#941;&#962; &#954;&#945;&#953; &#952;&#965;&#949;&#955;&#955;&#974;&#948;&#949;&#953;&#962; &#940;&#957;&#949;&#956;&#959;&#953; &#963;&#965;&#957;&#952;&#941;&#964;&#959;&#965;&#957; &#964;&#959;';
echo "orig: $s\n";
$s = mb_strtoupper($s);
echo "mb_strtoupper: $s\n";
$s = mb_convert_case($s, MB_CASE_UPPER, "UTF-8");
echo "mb_convert_case (upper): $s\n";
$s = mb_strtolower($s);
echo "mb_strtolower: $s\n";
$s = mb_convert_case($s, MB_CASE_LOWER, "UTF-8");
echo "mb_convert_case (lower): $s\n";
?>

Outputs:

orig: &#935;&#953;&#972;&#957;&#953;&#945;, &#946;&#961;&#959;&#967;&#941;&#962; &#954;&#945;&#953; &#952;&#965;&#949;&#955;&#955;&#974;&#948;&#949;&#953;&#962; &#940;&#957;&#949;&#956;&#959;&#953; &#963;&#965;&#957;&#952;&#941;&#964;&#959;&#965;&#957; &#964;&#959;
mb_strtoupper: &#935;&#921;&#908;&#925;&#921;&#913;, &#914;&#929;&#927;&#935;&#904;&#931; &#922;&#913;&#921; &#920;&#933;&#917;&#923;&#923;&#911;&#916;&#917;&#921;&#931; &#902;&#925;&#917;&#924;&#927;&#921; &#931;&#933;&#925;&#920;&#904;&#932;&#927;&#933;&#925; &#932;&#927;
mb_convert_case (upper): &#935;&#921;&#908;&#925;&#921;&#913;, &#914;&#929;&#927;&#935;&#904;&#931; &#922;&#913;&#921; &#920;&#933;&#917;&#923;&#923;&#911;&#916;&#917;&#921;&#931; &#902;&#925;&#917;&#924;&#927;&#921; 
&#931;&#933;&#925;&#920;&#904;&#932;&#927;&#933;&#925; &#932;&#927;
mb_strtolower: &#967;&#953;&#972;&#957;&#953;&#945;, &#946;&#961;&#959;&#967;&#941;&#963; &#954;&#945;&#953; &#952;&#965;&#949;&#955;&#955;&#974;&#948;&#949;&#953;&#963; &#940;&#957;&#949;&#956;&#959;&#953; &#963;&#965;&#957;&#952;&#941;&#964;&#959;&#965;&#957; &#964;&#959;
mb_convert_case (lower): &#967;&#953;&#972;&#957;&#953;&#945;, &#946;&#961;&#959;&#967;&#941;&#963; &#954;&#945;&#953; &#952;&#965;&#949;&#955;&#955;&#974;&#948;&#949;&#953;&#963; &#940;&#957;&#949;&#956;&#959;&#953; 
&#963;&#965;&#957;&#952;&#941;&#964;&#959;&#965;&#957; &#964;&#959;

And this is quite correct..
 [2009-05-06 21:10 UTC] jani@php.net
Ignore the previous, this bad bug system messed up the input. :)
Here's the actual stuff: http://pecl.php.net/~jani/bug47742.out
 [2009-05-07 13:57 UTC] fsb at thefsb dot org
jani, that looks like an improvement. should i try out the may 7 
snapshot?
 [2009-05-12 02:11 UTC] jani@php.net
Please try using this CVS snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows:

  http://windows.php.net/snapshots/

Please do. :)
 [2009-05-20 01:00 UTC] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Sat Oct 19 02:01:27 2019 UTC