安卓系统:PHP UTF8


Android: PHP UTF8

我有一个PHP(5.3)脚本,它从数据库中获取数据,并通过JSON将其传递给android。UTF-8字符仅适用于É、Ü等

但不是俄语和汉语字母!

$createTableMessage = $db->prepare("CREATE TABLE IF NOT EXISTS message (
`id` int(11) unsigned NOT NULL auto_increment,
`fromusername` varchar(255) NOT NULL default '',
`tousername` varchar(255) NOT NULL default '',
`imageid` int(11) default null,
`text` varchar(255) default null,
`ispublic` int(11) default 0,
PRIMARY KEY  (`id`))
CHARACTER SET utf8 COLLATE utf8_general_ci");

功能"发送消息"

...
$answerarray[] = array( 
"id" => $row['id'],
"countdown" => $row['-1'],
"answerswerText" => $row['text'],
"answerswerusername" => $row['fromusername'],
"filename" => $row[' '],
"country" => $row['country']
);
utf8_encode_deep($answerarray);
echo json_encode(array('answer'=>$answerarray));

函数utf8_encode_deep(来自互联网)

function utf8_encode_deep(&$input) {
if (is_string($input)) {
    $input = utf8_encode($input);
} else if (is_array($input)) {
    foreach ($input as &$value) {
        utf8_encode_deep($value);
    }
    unset($value);
} else if (is_object($input)) {
    $vars = array_keys(get_object_vars($input));
    foreach ($vars as $var) {
        utf8_encode_deep($input->$var);
    }
}
}

要成功交付utf8字符,您需要确保

  1. 数据库表和字段
  2. 到数据库的连接
  3. php文件本身的编码
  4. 输出文件的内容类型标头

都是utf8。如果在mysql中手动查询结果时得到了正确的字符,那么问题很可能出在3或4上。

json编码不会破坏编码,如果它一开始是正确的。在将数据转换为json字符串之前,您可以检查从mysql获得的数据是否正确(在PHP中使用print_r)。