服务器数据库只支持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 ='对要提交的中文进行编码';*/请问怎么解决?

解决方案 »

  1.   

    iconv转你提交的带汉字的字符串
      

  2.   

    mysql_query('set names latin1');//数据库编码
    ????
    你发往数据库的是 latin1 编码的数据吗?另外:
    如果取值用如下代码,数据库文字正常:/*$askUser =03;
    $askId =04;
    $content ='对要提交的中文进行编码';*/是什么意思?
      

  3.   

    假如$content的值是:输入答案
    iconv('utf-8', 'latin1',$content);
    没有效果经测试:echo($content.':'.mb_detect_encoding($content).'<br />');得到的结果是:输入答案:UTF-8
      

  4.   

    代码写成这样:
    $askUser =03;
    $askId =04;
    $content ='对要提交的中文进行编码';
    $sql="INSERT INTO `answer` (`id`, `uid`, `asid`, `content`, `readme`) VALUES (NULL, '".$user."','".$askId."','".$content."', NULL)";
    $resultAns =mysql_query($sql);没有乱码,好的
      

  5.   

    要这种
    $content=iconv('utf-8', 'latin1',$content);
    而不是直接用 iconv()..;
    试试可以么。另:你的php文件就是utf-8格式的么
      

  6.   

    你帖出 echo base64_encode($content); 的结果
      

  7.   

    $content=iconv('utf-8', 'latin1',$content);执行后,$content里什么都没有
      

  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==
      

  9.   

    你 #5 的代码中有
     $content=iconv('utf-8', 'latin1',$content);
    吗?
    我要你给出 #5 中的 base64_encode($content)
      

  10.   

    Ajax传值:“输入答案ggg”
    程序代码:
    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不管怎么样,先谢谢大家帮忙想办法!!!
      

  11.   

    $askUser =03;
    $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
      

  12.   

    你为什么要自作主张的对数据转码呢?
    $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 的结果
    只有你出了正确的信息,我才能告诉你应该怎么做!
      

  13.   

    你为什么要自作主张的对数据转码呢?
    $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 的结果
    只有你出了正确的信息,我才能告诉你应该怎么做!
      

  14.   

    $content=iconv('utf-8', 'latin1',$content);
    echo $content;//转了之后就为空了。
    用iconv之前先检测提交上来的内容的编码。
    $encode=mb_detect_encoding($content,array("latin1","UTF-8","GB2312","GBK"));
    echo $encode;//看是什么结果。
      

  15.   

    页面编码utf-8Ajax提交内容:
    “输入答案,点击[回答]按钮,回答话题”代码:
    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对应内容:
    杈撳叆绛旀锛岀偣鍑籟鍥炵瓟]鎸夐挳,鍥炵瓟璇濋请高手帮忙看看在怎么回事?
      

  16.   

    现在已经可以确认几点:
    1、你的传入数据的确是 utf-8 编码的数据
    2、该数据也确实已存入了数据库还需要确认的是:
    1、你所谓的 
    数据库$content对应内容:
    杈撳叆绛旀锛岀偣鍑籟鍥炵瓟]鎸夐挳,鍥炵瓟璇濋
    是用什么工具查看的
    2、读出这个数据,并在页面打印出来时,是否是乱码?
      

  17.   


    提交内容:输入答案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
      

  18.   


    服务器提供的phpAdmin查看的
      

  19.   

    上面有测试结果和各位朋友的回复,如果哪位大侠知道结果,请发邮箱[email protected],谢谢!!!我继续跟代码较劲去了。