1、去掉头:header("Content-type: text/html; charset=utf-8");
让浏览器自己识别语言编码
2、你传送的数据不是 utf-8 编码的!自然要出错啦
/**
 * 函数 is_utf8
 * 功能 检查传入的串是否为utf-8编码串
 * 返回 逻辑,是 true,不是 false
 **/
if(! function_exists('is_utf8')):
function is_utf8($s) {
   if(preg_match('/^(?:[\x00-\x7f]|[\xc0-\xff][\x80-\xbf]+)+$/', $s)) {
   return true;
   }
   return false;
}
endif;3、你的 $data 长度为59字节,每个双字节字符的utf-8编码一般为3个字节长

解决方案 »

  1.   

    上面的输出不是乱码吗?chr 的结果应是二位16进度码
    utf8 是四位16进制码所以GB码转成UTF8的话每个字符会加两个码位如果是二进制流的话转换就会有问题,出现乱码
      

  2.   

    我不管 $data 是否为正确的UTF8字符串,数据验证一律不管
    明摆着编码就是错的,关键是,即使是错的也要正常显示输入框
    总不能因为数据是错的,而破坏整个输入框吧<input name=test value="$data    "> 这样的是可以正常显示的
    <input name=test value="$data"> 这样的就不行了
      

  3.   

    请注意审题,乱码是很正常的,数据源本身就是乱码
    但即使是乱码也必须要在 input 里显示出来
      

  4.   

    不是和你说了吗?
    如果你声明了 charset=utf-8 ,那么浏览器就会认为传给他的是 utf-8 编码的内容,而你实际上的不是.所以无法得到正确结果
    只要你不去声明页面语言,浏览器就会自动的识别只要去掉 header("Content-type: text/html; charset=utf-8");
    就ok啦
      

  5.   

    为什么要去掉 header("Content-type: text/html; charset=utf-8");
    我要求的就是输出成 utf8 的文字错就错了,数据完整性不考虑考虑的是要显示出来,哪怕他是错的,也要把错的显示出来
      

  6.   

    估计是一个bug,不过不知道为什么加空格就ok
    虽然最后一个字符有问题,但我并不认为是异常字符。
    异常字符只可能是双引号 " 吧,欢迎继续拍砖。
      

  7.   

    我不是可以正常显示的吗?<input name=test value="カウントダウンソリューション)で難解なパ&#65533;">
    可能是你浏览器有问题
      

  8.   

    字符本来就有问题。
    自然就显示不出来。
    你前面发出的HEADER只是强制把编码设置为UTF-8.
    可这个赶奔就不是UTF8
    因为你这些字符中间有一个双引号。
    你试试看。
      

  9.   

    我用它提供的代码是可以显示的,虽然value的值是乱码~但哪里有显示不出来啊?我用php5的
      

  10.   

    再次强调一点,页面要求使用UTF8,不能因为表单中一个数据项是错的,就把整个页面都改了请使用 IE6 的人测试下面的代码,说一下现象,先不讨论为什么,先说一下现象header("Content-type: text/html; charset=utf-8");
    $data= chr(227) . chr(130) . chr(171) . chr(227) . chr(130) . chr(166) . chr(131) . chr(145) . chr(227) . chr(131) . chr(145) . chr(227);echo "<input name=test value=\"$data   \">";echo "<input name=test value=\"$data\">";
      

  11.   

    我的测试结果~~IE6.0.2900<input name=test value="カウ&#65533;&#65533;パ&#65533;   "><input name=test value="カウ&#65533;&#65533;パ&#65533;">多么正常啊~~我不知道你有什么疑惑
      

  12.   

    在firefox下
    正常显示在IE6下显示,出现源码
    <input name=test value="カウントダウンソリューション)で難解なパ&#14526;
      

  13.   

    echo "<input name=test value=\'$data\'>";
    将双引号改为单引号后
    正常显示
      

  14.   

    上面的在firefox下有点问题,但IE下正常看下面:echo "<input name=test value=".$data.">";
    IE和firefox均正常显示看来还是转码时引号问题
      

  15.   

    上面还不行又试了一下
    echo "<input name=test value=\'$data\'>";
    都有输入框但IE下框内显示\'カウントダウンソリューション)で難解なパ&#14119;
    但firefox下框内显示
    \'カウントダウンソリューション)で難解なパ?\'没有其他办法。如果能给变量$data先转为UTF8就好了
      

  16.   

    也许和php源代码保存的编码有关系(我猜的),我是保存成utf8的
      

  17.   

    我的是IE6
    xuzuning(唠叨)的方法是一种思路:实际上,这是个转码问题。但在输出时却没有进行转码加空格是一种办法!chr(),输出的是ASCII码,8位码,而UTF8是4个16进制码,当要输出UTF8时,码位就乱了,所有有乱码!ASCII 转成UTF8 要进行补位!正常情况下,是要内码转换的!除非系统自动识别!所以,加空格可能是一种补位操作,你可多加几个空格看看!一般情况下,不会出现这个问题!因为,如果从网页输入,可以是UTF8或GBK,直接入数据库,可以进行转换!实质是在进入数据库时已进了了转码,出库时也时了转码!不会有问题!