[英]PHP array_key_exists and UTF 8
我有一個數據庫,編碼為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)
我不知道怎么走得更遠,你遇到了這個問題嗎?
我有性能要求。
謝謝你的幫助。
如果數組密鑰確實是來自數據庫的UTF-8字符串,則它以UTF-8編碼。 顯然你的源代碼文件不是用UTF-8編碼的,我猜它是用Latin-1編碼的。 因此,UTF-8字節序列和Latin-1字節序列之間的比較是不成功的。 以UTF-8保存源代碼文件,它應該工作(請咨詢您的文本編輯器)。
但是當DB中的名稱包含“é”等重音符時,以下內容返回false:array_key_exists('namé',$ hashmap)
唉,到目前為止,PHP中的字符串不是UTF-8編碼的。 我相信你必須自己編碼:
<?php
array_key_exists(utf8_encode('namé'), $hashmap);
碼:
<?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中,它似乎對我沒用。
@漿果
實際上,當我構建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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.