0
我有問題在PHP中將字符串轉換爲小寫,當它包含一個特殊的字符,在這種情況下,尤其是元音變形,因爲我正在處理名稱。這裏的用例是我正在搜索數組中的名字,其中數據庫中所有已存在的名字都被放在小寫字母中(實際上由strtolower
完成,它工作正常)。PHP strtolower與特殊的字符(如:
問題是,轉換爲小寫的特殊字符失敗,這很奇怪,因爲它與數據庫中的名稱一起工作,並且在這兩種情況下輸入都是utf8。我甚至用mb_detect_encoding($name)
首先檢查編碼,它返回UTF-8
。
// All names from the database are read into an array, mysql charset is utf8
foreach($db_names as $namerow) {
$name = $namerow['lastname'] .' '. $namerow['firstname'];
$allnames[strtolower($name)] = $namerow['id']; // works
}
// Get data from a webservice which return utf-8 encoded data (i checked that)
$data = ...;
// Test the utf-8
header('Content-Type: text/html; charset=utf-8');
print_r($allnames); // everything is correct here
var_dump(strtolower($data['name'])); // Output i.e. rÖmer - notice still uppercase char
var_dump(mb_strtolower($data['name'])); // Output with strange ? character - r?mer
var_dump(mb_detect_encoding($data['name'])); // Output: UTF-8
花了一段時間找時間嘗試,但你的答案是完美的。它使用php的iconv.internal_encoding設置嗎?也很奇怪的是,strtolower可以使用utf8從數據庫,但不是從外部API ... – patman 2014-11-14 16:52:47
它使用'mbstring.internal_encoding' ini設置。 – Boann 2014-11-14 16:59:24