服务器数据库只支持Latin1编码,Ajax提交(post方法)中文写入数据库乱码。代码如下:mysql_query('set names latin1');//数据库编码
$askUser =$_POST['askUser'];
$askId =$_POST['askId'];
$content =$_POST['content'];
$sql="INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '".$user."','".$askId."','".$content."', NULL)";
$resultAns =mysql_query($sql);
如果取值用如下代码,数据库文字正常:/*$askUser =03;
$askId =04;
$content ='对要提交的中文进行编码';*/请问怎么解决?
$askUser =$_POST['askUser'];
$askId =$_POST['askId'];
$content =$_POST['content'];
$sql="INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '".$user."','".$askId."','".$content."', NULL)";
$resultAns =mysql_query($sql);
如果取值用如下代码,数据库文字正常:/*$askUser =03;
$askId =04;
$content ='对要提交的中文进行编码';*/请问怎么解决?
????
你发往数据库的是 latin1 编码的数据吗?另外:
如果取值用如下代码,数据库文字正常:/*$askUser =03;
$askId =04;
$content ='对要提交的中文进行编码';*/是什么意思?
iconv('utf-8', 'latin1',$content);
没有效果经测试:echo($content.':'.mb_detect_encoding($content).'<br />');得到的结果是:输入答案:UTF-8
$askUser =03;
$askId =04;
$content ='对要提交的中文进行编码';
$sql="INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '".$user."','".$askId."','".$content."', NULL)";
$resultAns =mysql_query($sql);没有乱码,好的
$content=iconv('utf-8', 'latin1',$content);
而不是直接用 iconv()..;
试试可以么。另:你的php文件就是utf-8格式的么
$askUser =$_POST['askUser'];
$askId =$_POST['askId'];
$content =$_POST['content'];
$content=iconv('utf-8', 'latin1',$content);//对要提交的中文进行编码
echo($content.':'.mb_detect_encoding($content).'<br />');$sql="INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '".$user."','".$askId."','".$content."', NULL)";
echo($sql.'<br />');
echo base64_encode("kkk:".$content);
$resultAns =mysql_query($sql);执行后的结果:
:ASCII
INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '','30','', NULL)
a2trOg==
$content=iconv('utf-8', 'latin1',$content);
吗?
我要你给出 #5 中的 base64_encode($content)
程序代码:
mysql_query('set names latin1');//数据库编码$askUser =$_POST['askUser'];
$askId =$_POST['askId'];
$content =$_POST['content'];
$content=iconv('utf-8', 'latin1',$content);//对要提交的中文进行编码
echo($content.':'.mb_detect_encoding($content).'<br />');
$sql="INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '".$user."','".$askId."','".$content."', NULL)";
echo($sql.'<br />');
echo 'aaa:'.base64_encode($content).'kkk<br />';
$resultAns =mysql_query($sql);执行结果:
:ASCII
INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '','30','', NULL)
aaa:kkk不管怎么样,先谢谢大家帮忙想办法!!!
$askId =04;
$content ='对要提交的中文进行编码';$content=iconv('utf-8', 'latin1',$content);//对要提交的中文进行编码
echo($content.':'.mb_detect_encoding($content).'<br />');$sql="INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '".$user."','".$askId."','".$content."', NULL)";
echo($sql.'<br />');
echo 'aaa:'.base64_encode($content).'kkk<br />';
$resultAns =mysql_query($sql);
结果::ASCII
INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '','4','', NULL)
aaa:kkk
$content=iconv('utf-8', 'latin1',$content);//
这么做可行吗?告诉你,这是不可以的!
utf-8 是多字节字符,而 latin1 是单字节字符,转码的结果必然是错误的!你在 #5 说
代码写成这样:
$askUser =03;
$askId =04;
$content ='对要提交的中文进行编码';
$sql="INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '".$user."','".$askId."','".$content."', NULL)";
$resultAns =mysql_query($sql);没有乱码,好的我就要你帖出这个 $content base64_encode 的结果
只有你出了正确的信息,我才能告诉你应该怎么做!
$content=iconv('utf-8', 'latin1',$content);//
这么做可行吗?告诉你,这是不可以的!
utf-8 是多字节字符,而 latin1 是单字节字符,转码的结果必然是错误的!你在 #5 说
代码写成这样:
$askUser =03;
$askId =04;
$content ='对要提交的中文进行编码';
$sql="INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '".$user."','".$askId."','".$content."', NULL)";
$resultAns =mysql_query($sql);没有乱码,好的我就要你帖出这个 $content base64_encode 的结果
只有你出了正确的信息,我才能告诉你应该怎么做!
echo $content;//转了之后就为空了。
用iconv之前先检测提交上来的内容的编码。
$encode=mb_detect_encoding($content,array("latin1","UTF-8","GB2312","GBK"));
echo $encode;//看是什么结果。
“输入答案,点击[回答]按钮,回答话题”代码:
mysql_query('set names latin1');//数据库编码$askUser =$_POST['askUser'];
$askId =$_POST['askId'];
$content =$_POST['content'];echo($content.':'.mb_detect_encoding($content).'<br />');$sql="INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '".$user."','".$askId."','".$content."', NULL)";
echo($sql.'<br />');
echo 'aaa:'.base64_encode($content).'kkk<br />';
$resultAns =mysql_query($sql);执行结果:
输入答案,点击[回答]按钮,回答话题:UTF-8
INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '','20','输入答案,点击[回答]按钮,回答话题', NULL)
aaa:6L6T5YWl562U5qGI77yM54K55Ye7W+WbnuetlF3mjInpkq4s5Zue562U6K+d6aKYkkk数据库$content对应内容:
杈撳叆绛旀锛岀偣鍑籟鍥炵瓟]鎸夐挳,鍥炵瓟璇濋请高手帮忙看看在怎么回事?
1、你的传入数据的确是 utf-8 编码的数据
2、该数据也确实已存入了数据库还需要确认的是:
1、你所谓的
数据库$content对应内容:
杈撳叆绛旀锛岀偣鍑籟鍥炵瓟]鎸夐挳,鍥炵瓟璇濋
是用什么工具查看的
2、读出这个数据,并在页面打印出来时,是否是乱码?
提交内容:输入答案1234
代码:
mysql_query('set names latin1');//数据库编码$askUser =$_POST['askUser'];
$askId =$_POST['askId'];
$content =$_POST['content'];echo($content.':'.mb_detect_encoding($content).'<br />');$encode=mb_detect_encoding($content,array("latin1","UTF-8","GB2312","GBK"));
echo 'aaa=>'.$encode.'=>kkk<br />';//看是什么结果。$sql="INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '".$user."','".$askId."','".$content."', NULL)";
echo($sql.'<br />');
echo 'aaa=>'.base64_encode($content).'=>kkk<br />';
$resultAns =mysql_query($sql);页面执行结果:
输入答案1234:UTF-8
aaa=>ISO-8859-1=>kkk
INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '','30','输入答案1234', NULL)
aaa=>6L6T5YWl562U5qGIMTIzNA===>kkk数据库内容:
杈撳叆鍥炵瓟1234
服务器提供的phpAdmin查看的