Edit report at https://bugs.php.net/bug.php?id=18556&edit=1
ID: 18556 Comment by: me at ollieread dot com Reported by: spud at nothingness dot org Summary: Setting locale to 'tr_TR' lowercases class names Status: Closed Type: Bug Package: Scripting Engine problem Operating System: Linux (RedHat 7.2) PHP Version: 5CVS, 4CVS (2005-10-04) Assigned To: stas Block user comment: N Private report: N New Comment: I don't know how helpful this will be, but I've recently had an issue with the Turkish locale where I work. I tried lots of different methods, but the main issue seems to be with LC_CTYPE, as although class/method declarations include I, it's added to the stack as i. I've wrote a couple of fixes that hopefully approach all cases, be warned, they are however a bit hacky. http://codeosaur.us/2012/07/16/php-and-the-tr_tr-utf8-locale/ You can simple explicitly set LC_CTYPE to your native language(eg en_US.utf8), but if you absolutely must have tr_TR.utf8 there, then you can use the magic of __autoload(), __call() and class_alias to handle it for you. Hope this helps. Previous Comments: ------------------------------------------------------------------------ [2012-07-14 22:59:37] s...@php.net This bug has been fixed in SVN. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. For Windows: http://windows.php.net/snapshots/ Thank you for the report, and for helping us make PHP better. Fixed in master. ------------------------------------------------------------------------ [2012-07-04 08:52:28] maar...@php.net @ stormbyte, I just made 2 separate more explicit tests, one for tr_TR.iso8859-9 and one for tr_TR.UTF-8 and they do have the same outcome: tr_TR.iso8859-9 - http://3v4l.org/o5YCk tr_TR.UTF-8 - http://3v4l.org/F2gEb 3v4l.org uses a 'vanilla' PHP setup, be free to play with phpinfo() and the likes to see for yourself. ------------------------------------------------------------------------ [2012-07-03 17:05:03] stormbyte at gmail dot com The problem: <?php setlocale(LC_ALL, 'tr_TR.UTF-8'); echo strtolower('THIS IS JUST A TEST'); ?> output: thIs Is just a test So if it is using the same function internally to do the tolower on class names, it will not find them. A workarround would be use toupper instead of tolower in zend_internal namespace handling, despite the correct fix would be to use independent identifyers (??) ------------------------------------------------------------------------ [2012-07-03 16:53:08] stormbyte at gmail dot com maar...@php.net: They don't seem to be running vanilla PHP installations. I've compiled php-5.4.4 from Gentoo and do not appear to be fixed to me, even in 5.4.4. Can you try on a vanilla PHP? ------------------------------------------------------------------------ [2012-07-03 16:42:22] stormbyte at gmail dot com It is not fixed in 5.4.4 as some stated above. Tested with php 5.4.4 Testcase: <?php echo 'Starting...<br />'; $class = 'PharFileInfo'; echo 'Locale: '.setlocale(LC_ALL, '0')."<br />"; echo "$class exists? ".var_export(class_exists($class), true)."<br />"; echo 'Locale: '.setlocale(LC_ALL, 'tr_TR.UTF-8')."<br />"; echo "$class exists? ".var_export(class_exists($class), true)."<br />"; >? Output with nginx+spawnFCGI: Starting... Locale: C PharFileInfo exists? true Locale: tr_TR.UTF-8 PharFileInfo exists? false Output with cli (php -f test.php): Starting...<br />Locale: C<br />PharFileInfo exists? true<br />Locale: tr_TR.UTF-8<br />PharFileInfo exists? false<br /> ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=18556 -- Edit this bug report at https://bugs.php.net/bug.php?id=18556&edit=1