Encoding 对俄语字母进行编码时有缺陷的字符
我正在向服务器查询一些信息(返回为JSON),特别是一个名称列表,其中一个名称返回包含奇怪字符: Ð 应该是这样的: аааааааааћ 我尝试了以下方法:Encoding 对俄语字母进行编码时有缺陷的字符,encoding,utf-8,json,Encoding,Utf 8,Json,我正在向服务器查询一些信息(返回为JSON),特别是一个名称列表,其中一个名称返回包含奇怪字符: Ð 应该是这样的: аааааааааћ 我尝试了以下方法: 从字符串中删除BOM(字节顺序标记)(否则PHP不会解码JSON),然后使用JSON\u decode对其进行解码,并直接获取名称并将其插入我的UTF8编码的MySQL数据库 使用具有UTF8排序规则的字段 。。。无效-数据库中的值仍然存在缺陷 如何解决这个问题 编辑: 运行显示变量,如“%character%”返回 characte
- 从字符串中删除BOM(字节顺序标记)(否则PHP不会解码JSON),然后使用
对其进行解码,并直接获取名称并将其插入我的UTF8编码的MySQL数据库JSON\u decode
- 使用具有UTF8排序规则的字段
显示变量,如“%character%”
返回
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /data/mysql/fuentez/share/mysql/charsets/
这可能是因为字符集服务器是拉丁文1吗?您将数据存储在数据库中,而不是UTF-8
例如,拉丁1编码的字符串变成了西里尔字母
0xd0 0xb5
,这是西里尔字母的UTF-8编码,这可能是将json格式与俄语SIMBOL结合起来的一种便捷方式:
新的json_解码功能
<?php
function json_encode_my($value)
{
if (is_int($value)) {
return (string)$value;
} elseif (is_string($value)) {
$value = str_replace(array('\\', '/', '"', "\r", "\n", "\b", "\f", "\t"),
array('\\\\', '\/', '\"', '\r', '\n', '\b', '\f', '\t'), $value);
$convmap = array(0x80, 0xFFFF, 0, 0xFFFF);
$result = "";
for ($i = mb_strlen($value) - 1; $i >= 0; $i--) {
$mb_char = mb_substr($value, $i, 1);
if (mb_ereg("&#(\\d+);", mb_encode_numericentity($mb_char, $convmap, "UTF-8"), $match)) {
$result = sprintf("\\u%04x", $match[1]) . $result;
} else {
$result = $mb_char . $result;
}
}
return '"' . $result . '"';
} elseif (is_float($value)) {
return str_replace(",", ".", $value);
} elseif (is_null($value)) {
return 'null';
} elseif (is_bool($value)) {
return $value ? 'true' : 'false';
} elseif (is_array($value)) {
$with_keys = false;
$n = count($value);
for ($i = 0, reset($value); $i < $n; $i++, next($value)) {
if (key($value) !== $i) {
$with_keys = true;
break;
}
}
} elseif (is_object($value)) {
$with_keys = true;
} else {
return '';
}
$result = array();
if ($with_keys) {
foreach ($value as $key => $v) {
$result[] = json_encode((string)$key) . ':' . json_encode($v);
}
return '{' . implode(',', $result) . '}';
} else {
foreach ($value as $key => $v) {
$result[] = json_encode($v);
}
return '[' . implode(',', $result) . ']';
}
}
?>
数据库内部编码是一回事,但您还需要设置适当的连接编码,您将从中找到自己的方法:БМааМаМајћ不是俄语,它包含非西里尔字符,如њ、ј,插入时需要将连接上的编码设置为UTF-8。您使用的是什么数据库库?你能发布你的插入码吗?@SteffanLong:也许这能帮你?谢谢,将它添加到我的PDO初始化中就完成了!