错误信息的意思是向数据库添加的UTF-8编码格式不正确。
看看问题是不是在这句
$str=addslashes($str); 使用string下的函数操作中文字串经常会出现错误的,
比如说2-3byte一个的文字看成是2个文字,从中间切开等等。
必须替换成mb_string

解决方案 »

  1.   

    echo mb_detect_encoding($str,array('ascii','utf-8','gbk','cp936')); 
    感觉你是检测编码这出了问题.
      

  2.   


    $str=file_get_contents("http://cache.qihoo.com/wenda.php?do=snap&act=fetchHtmlsnap&m=d113d9ecb6a77717d288d3e021dd3e48&surl=http%3A%2F%2Fbbs.gxsd.com.cn%2Fviewthread.php%3Ftid%3D221900%26extra%3Dpage%253D1&kw=%D7%AF%D7%D3");
     
    echo mb_detect_encoding($str,array('ascii','utf-8','gbk','cp936')); //看看这个输出是什么,也可以用IE打开看看编码,看是不是和本页文件的本身编码和meta编码一致
    如果不一致,转成页面的编码,然后$str=addslashes($str); 
    $conn=mysql_connect('localhost','root','cgs'); 
    mysql_select_db('data'); 
    mysql_query("set names 'utf8'");  //注意一下写法,如果文件的编码是utf-8,则这么用,否则用页面的编码$sql="insert into table values('".$str."')";   //这个如果只有一个字段,可这么用,否则出错
    $res=mysql_query($sql); 
    if($res==false) 
    echo mysql_error(); 看看mysql版本,
    mysql4.1以下的,set names 'utf8'"无效
    ?> 
      

  3.   

    把addslashes换成mysql_real_escape_string看看
      

  4.   

    你先输出一下各个值看看
    echo mb_detect_encoding($str,array('ascii','utf-8','gbk','cp936')); //看看这个输出是什么,也可以用IE打开看看编码,看是不是和本页文件的本身编码和meta编码一致
    如果不一致,转成页面的编码,然后看看这个值是否IE下的一致
    然后查一个文件自身的内码;
    一个一个查,报出来
      

  5.   

    https://www.phpx.com/thread-148498-1-1.html
    http://www.phpx.com/viewarticle.php?id=135226
      

  6.   

    http://cache.qihoo.com/wenda.php?do=snap&act=fetchHtmlsnap&m=d113d9ecb6a77717d288d3e021dd3e48&surl=http%3A%2F%2Fbbs.gxsd.com.cn%2Fviewthread.php%3Ftid%3D221900%26extra%3Dpage%253D1&kw=%D7%AF%D7%D3这个是utf-8的var_dump(iconv_get_encoding('all'));看看文件的内码是不是也是utf-8
      

  7.   

    肯定是编码问题,请楼主确定:
    1、MySQL的数据库编码是否是UTF-8
    2、MySQL的数据表中的编码是否是UTF-8,以及字段是否是UTF-8
    3、PHP文件的文件编码是否是UTF-8
    4、网页的编码是否是UTF-8(用header传送UTF-8最好)
      

  8.   

    Date: Thu, 04 Dec 2008 05:35:56 GMT
    Server: Apache
    P3P: CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
    Set-Cookie: B=ID=589951228368956:V=2:S=0418fdd281; path=/; expires=Sun, 17-Jun-2038 23:59:59 GMT; domain=.qihoo.com
    Set-Cookie: UT=T=1228368956:F=Y2FjaGUucWlob28uY29t:REF=cache.qihoo.com:S=1; path=/; domain=.qihoo.com
    X-Powered-By: PHP/5.2.3
    Set-Cookie: QT_UID=bd98f4f3e746c500; path=/; domain=.qihoo.com
    Cache-Control: max-age=14400
    Pragma: cache
    ETag: d120c1fb0aff67fc1d80c6b4ed8863b7
    Expires: Thu, 04 Dec 2008 09:35:57 GMT
    Vary: Accept-Encoding
    Content-Type: text/html
    X-Cache: MISS from c1.pr.bjt.qihoo.net
    Via: 1.1 c1.pr.bjt.qihoo.net:80 (squid)
    Connection: close
    很明显,返回的页面经过了编码。
    你还需要iconv来转一下编码conv
    (PHP 4 >= 4.0.5, PHP 5)iconv -- Convert string to requested character encoding
    Description
    string iconv ( string in_charset, string out_charset, string str)
    Performs a character set conversion on the string str from in_charset to out_charset. Returns the converted string or FALSE on failure. 例子 1. iconv() example:<?php
    echo iconv("ISO-8859-1", "UTF-8", "This is a test.");
    ?>  
     很好解决的