【发布时间】:2014-11-08 18:01:57
【问题描述】:
当我处理包含特殊字符时,我在 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
【问题讨论】: