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