Edit report at https://bugs.php.net/bug.php?id=18556&edit=1
ID: 18556
Comment by: sg at facelift-bbt dot com
Reported by: spud at nothingness dot org
Summary: Setting locale to 'tr_TR' lowercases class names
Status: Assigned
Type: Bug
Package: Scripting Engine problem
Operating System: Linux (RedHat 7.2)
PHP Version: 5CVS, 4CVS (2005-10-04)
Assigned To: dmitry
Block user comment: N
Private report: N
New Comment:
This bug was first reported 9 years ago? This definetly got to be fixed. This
is a total stopper. I can reproduce it exactly it is shown below.
Previous Comments:
------------------------------------------------------------------------
[2011-11-06 19:29:44] gerd dot katzenbeisser at gmail dot com
here is a simple test case using the internal class PharFileInfo
<?
$class = 'PharFileInfo';
echo 'Locale: '.setlocale(LC_ALL, '0')."\n";
echo "$class exists? ".var_export(class_exists($class), true)."\n";
echo 'Locale: '.setlocale(LC_ALL, 'tr_TR.UTF-8')."\n";
echo "$class exists? ".var_export(class_exists($class), true);
?>
Output:
Locale: C
PharFileInfo exists? true
Locale: tr_TR.UTF-8
PharFileInfo exists? false
------------------------------------------------------------------------
[2011-09-16 14:18:21] robin dot bussiek at googlemail dot com
@sweiss-at-stylesight thanks for your explanation.
Big +1 for any solution to this topic.
------------------------------------------------------------------------
[2011-09-15 19:59:27] sweiss at stylesight dot com
No, the problem results because lowercase i (in most languages) and uppercase I
(in most languages) are not actually considered to be the upper/lower variant
of
the same letter in Turkish. In Turkish, the undotted ı is the lowercase of I,
and the dotted İ is the uppercase of i. If you have a class named Image, it
will break if the locale is changed to turkish because class_exists() function
uses zend_str_tolower(), and changes the case on all classes, because they are
supposed to be case insensitive. Someone else above explained it very well:
class_exists() function uses zend_str_tolower(). zend_str_tolower() uses
zend_tolower(). zend_tolower() uses _tolower_l() on Windows and tolower() on
other oses. _tolower_l() is not locale aware. tolower() is LC_CTYPE aware.
Please, oh please, can someone fix this already? It has been a very long time
and it's extremely annoying and difficult to work around if you have a large
multilingual website.
------------------------------------------------------------------------
[2011-09-15 19:51:48] robin dot bussiek at googlemail dot com
I am sorry to ask this for my understanding:
Is it true, that the cause for this bug lies in a false inclusion of the "I"
character in the Turkish character set - and therefore results in an
unnecessary replacement?
If so, my green knowledge leads me to the assumption, that a fix should be
rather simple.
**duck**,
Robin
------------------------------------------------------------------------
[2011-08-08 12:02:30] tolga at profelis dot com dot tr
php -v
PHP 5.3.3-7+squeeze3 with Suhosin-Patch (cli) (built: Jun 28 2011 08:24:40)
Problem continues!
------------------------------------------------------------------------
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