(PHP+;MySQL)在DB中保存字符集时出错,但解码正确

(PHP+;MySQL)在DB中保存字符集时出错,但解码正确,php,mysql,utf-8,character-encoding,Php,Mysql,Utf 8,Character Encoding,我可能在字符集编码/解码方面有一些问题。我会尽可能详细地描述(顺便说一句,有一些定制的cms,带有某种GWC框架,使用php),所以当用户注册cms并填写所有必填字段(如名字、姓氏等)时,他会在数据库中插入“ĄĘĮĘżŽŪĖ”等符号,插入值,如:“Äesnakas”,但这应该像“Česnakas”一样插入。但这并不是全部——当管理员(在CMS上)看到从数据库获得的值时——它会正确地显示(Česnakas) 试图查看它是如何从错误的字符集转换回正确的字符集的,没有发现任何东西(正在通过iconv函

我可能在字符集编码/解码方面有一些问题。我会尽可能详细地描述(顺便说一句,有一些定制的cms,带有某种GWC框架,使用php),所以当用户注册cms并填写所有必填字段(如名字、姓氏等)时,他会在数据库中插入“ĄĘĮĘżŽŪĖ”等符号,插入值,如:“Äesnakas”,但这应该像“Česnakas”一样插入。但这并不是全部——当管理员(在CMS上)看到从数据库获得的值时——它会正确地显示(Česnakas)

试图查看它是如何从错误的字符集转换回正确的字符集的,没有发现任何东西(正在通过iconv函数等进行查找),而且,我的搜索更加困难,因为有一半的cms文件是加密的,无法读取

在某些地方插入了带有字符集UTF-8和Windows-1257的标题,但这对我帮助不大

我尝试了以下方法将所有字符转换为正确的字符:

数据库行排序规则的更改(从latin1_swedish..更改为utf8_general_ci;utf8_unicode_520(和_ci))没有帮助。 从DB导出,并尝试用excel转换UTF-8字符集中的所有数据-仍然得到这些错误字符。(尝试了几种方法,也没有几个不同的字符集)

主要的问题是,是否有可能(如果有,如何)在DB中转换这些字符?否则,如果不是,如何识别框架如何解码所有字符并显示正确的字符,以构建从数据库获取所有数据的函数-解码它(到正确的符号),将它存储到正确的字符集的数据库中(如:get->convert->send-back-where-it-from->save)

注册中的代码(具有插入功能):

函数注册添加(){
如果($GLOBALS[fmMemberFirstName]!=“”)和($GLOBALS[fmMemberLastName]!=“”)和($GLOBALS[fmMemberPhone1]!=“”){
if(检查验证码($GLOBALS[captcha])){
如果(检查电子邮件($GLOBALS[fmMemberMail])){
mysql_select_db($GLOBALS[“DBName”]);
$new_pass=GenerateKey(8);
$strQuery=“插入gwc_成员值(“”,“$GLOBALS[fmMemberLogin]。”、“.md5($new_pass)。”、“$GLOBALS[fmMemberMail]。”、“$GLOBALS[fmMemberFirstName]。”、“$GLOBALS[fmMemberLastName]。”、“$GLOBALS[fmMemberPhone1]。”、“$GLOBALS[fmMemberPhone2]。”、“$GLOBALS[fmMemberAddress1]。”、“、“$GLOBALS[fmMemberAddress2]。”[fmMemberZipCode]。“,”、“$GLOBALS[fmMemberCity]。”、“$GLOBALS[fmMemberCountry]。”、“$GLOBALS[fmMemberJob]。”、“$GLOBALS[fmMemberImone]。”、“$GLOBALS[fmMemberKodas]。”、“$GLOBALS[fmMemberPvm]。”、“$GLOBALS[FMMemberAddress1]、”、“$GLOBALS[FMMemberAddress2]、“、”、“$GLOBALS[fmMemberTelefonas]。”、“、”、“$GLOBALS[fmMemberTelefonas]。”、“、”、”、“('Y-m-dh:i:s'),'1','0');
mysql\u查询($strQuery);
回声“
欢迎信息
电子邮件$GLOBALS[fmMemberMail] "; }否则{ 回声“
“.lang_2070。”

"; } }否则{ 回声“
“.lang_2080。”
"; } }否则{ 回声“
“.lang_2072。”

"; } }
可查看成员信息(并正确显示成员的字符)的页面:

函数成员视图()
{
回声“
[Kliento informacija]
";
$strQuery=“从gwc_成员中选择*,其中成员_id=”$GLOBALS[GP_成员id]。”;
mysql_select_db($GLOBALS[“DBName”]);
$result=mysql\u查询($strQuery);
而($rs=mysql\u fetch\u数组($result)){
$usergroup=$rs[“usergroup”];
回声“
瓦达斯,帕瓦德
$rs[会员名]$rs[会员名]

"; } mysql_free_result($result); }
某种名称生成:

function GenerateName($count) {
mt_srand((double)microtime()*1000000);
 $key = "";
 for ($i=0; $i<$count; $i++) {
   $c = mt_rand(0,2);
   if ($c==0) {
     $key .= mt_rand(0,9);
   } elseif ($c==1) {
     $key .= mt_rand(0,9);
   } else {
     $key .= mt_rand(0,9);
   }
 }
 return $key;
}
函数GenerateName($count){
mt_srand((双)微时间()*1000000);
$key=“”;

对于($i=0;$i而言,每个字符本质上只是0和1的表示,如何解释并不重要,只要您的gui显示“正确”的字符,并且您可以搜索它

以下是对的一些解释

Letter    Č 
UTF8      U+010C 
Binary    11000100:10001100    
DECIMAL   268
只要字符集能够保存信息,并且不“丢失”某些信息,您就可以清除这些信息


当你将信息保存在数据库中时,你发送的基本上是2个字节,每个字节代表一个数字,然后保存在数据库中,当然也保存在数据库中。

UTF-8是一种方法,但你需要在任何地方都使用它。你似乎使用的是非常旧的PHP版本,因此依赖默认值肯定行不通。警告:
mysql\u*
ext从PHP 5.5.0开始,Nesion已被弃用,并从PHP 7.0.0开始被删除。相反,应使用或扩展。选择MySQL API时,请参阅以获取进一步帮助。不要使用弃用的
MySQL\u*
接口;切换到
mysqli\u*
或PDO。有关可能出现的错误的提示,请参阅此部分。特别是,n请注意,
Č
应为十六进制
C48C
function GenerateName($count) {
mt_srand((double)microtime()*1000000);
 $key = "";
 for ($i=0; $i<$count; $i++) {
   $c = mt_rand(0,2);
   if ($c==0) {
     $key .= mt_rand(0,9);
   } elseif ($c==1) {
     $key .= mt_rand(0,9);
   } else {
     $key .= mt_rand(0,9);
   }
 }
 return $key;
}
Letter    Č 
UTF8      U+010C 
Binary    11000100:10001100    
DECIMAL   268