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