PHP 的 mb_strtoupper 函数中的土耳其字符错误

Turkish character bug in mb_strtoupper function of PHP

我的问题是对那些对我们有趣的角色有问题的土耳其大学的解释。

肯定 PHP 5 有一个 bug 通过大写并因此整理它们。

echo mb_strtoupper('Turkish capitals for ğ, i, ı, ş in uppercase', 'UTF-8');

给出结果:"TURKISH CAPITALS FOR Ğ, I, I, Ş IN UPPERCASE".

但这是错误的。正确的输出应该是"TURKİSH CAPİTALS FOR Ğ, İ, I, Ş İN UPPERCASE"

我们语言中的问题是 "i" 大写的“İ”和大写的“ı”"I"。

我猜你看出问题所在了。

我们应该向谁报告 PHP 中的这个 bug,有人知道吗?请告知,如果您编写一个子程序来暂时解决这个问题,我们将不胜感激。先谢谢了。

你能试试这个吗:

function pre_up($str){
    $str = str_replace('i', 'İ', $str);
    $str = str_replace('ı', 'I', $str);
    return $str;
}
echo mb_strtoupper(pre_up('Turkish capitals for ğ, i, ı, ş in uppercase'), 'UTF-8');

我不懂土耳其语,对吗?

输出

TURKİSH CAPİTALS FOR Ğ, İ, I, Ş İN UPPERCASE

您可以为此编写自己的函数:

function trkish_upper($str){
    $find = array('i', 'ı'); //any turkish chars
    $replace = array('İ','I');
    $new = str_replace($find,$replace,$str);
    return $new;
}

mb_strtoupper 不支持语言环境。为了处理这些类型的转换,您可以使用 Transliterator,例如:

echo Transliterator::create("tr-Upper")
    ->transliterate('Turkish capitals for ğ, i, ı, ş in uppercase');

输出:

TURKİSH CAPİTALS FOR Ğ, İ, I, Ş İN UPPERCASE