我有一个数据库,编码为UTF-8,用于多语言目的。 我知道我的应用程序中的所有内容都是UTF-8。
虽然我对array_key_exists函数有问题。
SELECT name, value from TABLE
$hashmap[ $row['name'] ] = $row['value']
但是当DB中的名称包含像'é'这样的重音时,以下内容将返回false:
$this->db->select('name');
$this->db->select('value');
$this->db->from('table');
$q = $this->db->get();
$res = $q->result_array();
foreach ($res as $value) {
$hashmap[$value['name']] = $value['value'];
}
$key = 'name é'; // an ord here returns 233
array_key_exists($key, $hashmap)
我不知道如何更进一步,你遇到了这个问题吗?
我有性能要求。
感谢您的帮助。
答案 0 :(得分:3)
如果数组密钥确实来自数据库的UTF-8字符串,则它以UTF-8编码。显然你的源代码文件不是用UTF-8编码的,我猜它是用Latin-1编码的。因此,UTF-8字节序列和Latin-1字节序列之间的比较是不成功的。以UTF-8保存源代码文件,它应该可以工作(请咨询您的文本编辑器)。
答案 1 :(得分:1)
但是当DB中的名称包含像'é'这样的重音时,以下内容返回false:array_key_exists('namé',$ hashmap)
唉,到目前为止,PHP中的字符串不是UTF-8编码的。我相信你必须自己编码:
<?php
array_key_exists(utf8_encode('namé'), $hashmap);
答案 2 :(得分:0)
代码:
<?php
$foo = array('namé' => 1);
var_dump($foo);
var_dump(array_key_exists('namé', $foo));
var_dump(isset($foo['namé']));
输出:
array(1) {
["namé"]=>
int(1)
}
bool(true)
bool(true)
PHP版本:
PHP 5.3.3 (cli) (built: Sep 13 2011 11:17:59)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
在PHP 5.3.3中似乎对我没用。
答案 3 :(得分:0)
@Berry
的确,当我构建hashmap时,调试我得到了这个:
$res = getDATABASEVALUES();
//res contains 20 rows, the number 11 has accent
$res[11]['name'] => returns 'name é'
ord($res[11]['name'][5]) => returns 195 and not 233