我编写的用于替换 mb_strtolower 的其他函数可能无法正常工作,因为它错误地将字素与代码点等同起来。
tolower,像许多 IntlChar 方法一样,专门处理代码点,因此需要代码点迭代器来隔离每个代码点。
此外,由于在 tolower 中,如果代码点没有小写版本,则返回提供的代码点,因此无需在转换之前专门测试字母代码点。
<?php
function u_tolower($text=''){
// 如果为空,则返回空(不浪费 CPU 周期)
if($text==''){return'';}
// 创建代码点断点迭代器以识别每个代码点的开头
$iterator=IntlBreakIterator::createCodePointInstance();
// 加载文本
$iterator->setText($text);
// 使用 parts 迭代器提取每个代码点本身,转换并将它附加到新字符串
$newtext='';
foreach($iterator->getPartsIterator() as $codepoint){$newtext.=IntlChar::tolower($codepoint);}
// 返回转换后的文本
return $newtext;
}
?>