我寫的另一個用來取代 mb_strtolower 的函式可能無法正常運作,因為它錯誤地將字素視為程式碼點。
tolower 與許多 IntlChar 方法一樣,專門用於程式碼點,因此需要程式碼點迭代器來隔離每個程式碼點。
此外,由於在 tolower 中,如果程式碼點沒有小寫版本,則會返回提供的程式碼點,因此無需在轉換前特別測試字母程式碼點。
<?php
函數 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;
}
?>