为了不让表格变形,决定让从数据库中读出来的数据将字符限制在3个字内,用的是substr();函数代码如下, 
<td align="center" height="28px"><?php echo substr("$info[mtName]",0,3);?></td>结果是数字和字母就可以,要是汉字的话就是乱码了....达人们帮忙解答...............感激不尽!

解决方案 »

  1.   

    要看页面的编码是什么格式。gbk下一个中文占两个字节,utf-8下一个中文占三个字节。所以你应该要判断一下:
    是gbk的话<?php echo substr("$info[mtName]",0,6);?>
    是utf-8的话<?php echo substr("$info[mtName]",0,9);?>当然这是纯中文的写法,如果中英想混的话,你要除去英文的部分,再截取中文。
      

  2.   

    $a='h我jlklkj'
    gbk:  echo substr($a,0,4);  
    utf-8:  echo substr("$a",0,5);反正凑齐三个字就可以了。
      

  3.   

    用mb_substr来截取,要不你用substr你都把汉字给截开了,当然会出现?号乱码之类的了
      

  4.   

    <?php 
        function cut_str($sourcestr,$cutlength){
    $returnstr='';
    $i=0;
    $n=0;
    $str_length=strlen($sourcestr);//字符串的字节数
    while (($n<$cutlength) and ($i<=$str_length))
    {
    $temp_str=substr($sourcestr,$i,1);
    $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码
    if ($ascnum>=224)    //如果ASCII位高于224,
    {
    $returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符
    $i=$i+3;            //实际Byte计为3
    $n++;            //字串长度计1
    }
    elseif ($ascnum>=192) //如果ASCII位高与192,
    {
    $returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符
    $i=$i+2;            //实际Byte计为2
    $n++;            //字串长度计1
    }
    elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母,
    {
    $returnstr=$returnstr.substr($sourcestr,$i,1);
    $i=$i+1;            //实际的Byte数仍计1个
    $n++;            //但考虑整体美观,大写字母计成一个高位字符
    }
    else                //其他情况下,包括小写字母和半角标点符号,
    {
    $returnstr=$returnstr.substr($sourcestr,$i,1);
    $i=$i+1;            //实际的Byte数计1个
    $n=$n+0.5;        //小写字母和半角标点等与半个高位字符宽...
    }
    }
    if ($str_length>$cutlength){
    $returnstr = $returnstr . "...";//超过长度时在尾处加上省略号
    }
    return $returnstr;
    }?>