这里提供两个函数,set_cn_font()和set_en_font(),
经过set_cn_font()处理的中文的长度正好等于用set_en_font()处理过的字母或者其他符号
的长度的两倍,这两个函数可以自由调用,要求中文必须经过set_cn_font()处理过,字母及
其他符号必须经过set_en_font(),不然会有乱码出现。不知道各位看懂了没有,
哪位大哥帮帮忙吧。。

解决方案 »

  1.   

    对不起,我自己也觉得我写的不是很容易看懂
    我在解释一下(可能越说越不明白)
    set_cn_font()和set_en_font(),是我虚拟出来的,各位只要调用就可以了
    我最终的目的就是把这个字符串显示出来
    比如我有个字符串是"我我我现在sfd很23糊涂,不知道sdfje929dfl该怎么办。"
    我想把她分段显示出来,比如每段是5个字,我想要的结果是我我我现在
    sfd很23糊
    涂,不知道
    sdfje929df
    l该怎么办

    这里面的每个中文都必须用set_cn_font()处理过,字母数字等必须用set_en_font处理过现在不知道我说清楚了吗,哎
    请各位帮帮忙:)
      

  2.   

    不必要吧!
    你不过就是想让它分行吗?
    在HEAD里加上这么一行:
    <STYLE>.WithBreaks { word-wrap:break-word;width:400}</STYLE>
    再在你想分行的表格的TD里这样写:
    <td class="WithBreaks">
    不知我理解的对不!不对请多谅解啊^_^
      

  3.   

    是的我是要分行,但是不是用的html文件里面,我是生成一个pdf文件,这些都用到那里面,html 里面的分行用不了,而我也查过了生成pdf文件所有的函数,
    都不好用,没有类似html里面用的分行方法,好象都要自己来控制输出字符的位置,生成pdf文件还要涉及到字体问题,不控制字体就会全是乱码,好麻烦,哎谢谢上面大哥:)
    帮小弟一下吧:)
      

  4.   

    <?
    /**********************************************
    *        Version     :     1.0.001 Free       *
    *        Copyright   :     Baby Studio        *
    *        Email       :     [email protected] *
    *        Author      :     Yingjie Pan        *
    **********************************************/
    ?>
    <?
    $vamyarr=BabySplit('我是BabyStudio,请多多指教!','2');
    foreach($vamyarr as $vsitem)
    {
    echo($vsitem.'<br/>');
    }
    function BabySplit($vsstr_,$vilen_)
    {
    $vareturn=array();
    $viindex=0;
    $vitmp=0;
    $vstmp='';
    $vicncharaterend=0;
    $vscharacter=substr($vsstr_,$viindex,1);
    $vsrealcharacter=substr($vsstr_,$viindex,1);
    while(strlen($vsrealcharacter))
    {
    $viindex++;
    if(ord($vscharacter)<0 || ord($vscharacter)>127)
    {
    if($vicncharaterend==0)
    {
    $vicncharaterend=1;
    }
    else
    {
    $vitmp++;
    $vicncharaterend=0;
    }
    }
    else
    {
    $vitmp++;
    }
    $vstmp=$vstmp.$vscharacter;
    if($vitmp==$vilen_)
    {
    array_push($vareturn,$vstmp);
    $vitmp=0;
    $vstmp='';
    }
    if(!strlen(substr($vsstr_,$viindex,1)))
    {
    array_push($vareturn,$vstmp);
    $vitmp=0;
    $vstmp='';
    break;
    }
    $vscharacter=substr($vsstr_,$viindex,1);
    $vsrealcharacter=substr($vsstr_,$viindex,1);
    }
    return($vareturn);
    }
    ?>
      

  5.   

    试试看这个
    ---------------<?
    /**********************************************
    *        Version     :     1.0.001 Free       *
    *        Copyright   :     Baby Studio        *
    *        Email       :     [email protected] *
    *        Author      :     Yingjie Pan        *
    **********************************************/
    ?>
    <?
    echo('效果1<br/>-------<br/>');
    $vamyarr=BabySplit2('我是BabyStudio,请多多指教!','5',0);
    foreach($vamyarr as $vsitem)
    {
    echo($vsitem.'<br/>');
    }
    echo('-------<br/><br/>');
    echo('效果2<br/>-------<br/>');
    $vamyarr=BabySplit2('我是BabyStudio,请多多指教!','5',1);
    foreach($vamyarr as $vsitem)
    {
    echo($vsitem.'<br/>');
    }
    echo('-------<br/>');
    function BabySplit($vsstr_,$vilen_)
    {
    $vareturn=array();
    $viindex=0;
    $vitmp=0;
    $vstmp='';
    $vicncharaterend=0;
    $vscharacter=substr($vsstr_,$viindex,1);
    $vsrealcharacter=substr($vsstr_,$viindex,1);
    while(strlen($vsrealcharacter))
    {
    $viindex++;
    if(ord($vscharacter)<0 || ord($vscharacter)>127)
    {
    if($vicncharaterend==0)
    {
    $vicncharaterend=1;
    }
    else
    {
    $vitmp++;
    $vicncharaterend=0;
    }
    }
    else
    {
    $vitmp++;
    }
    $vstmp=$vstmp.$vscharacter;
    if($vitmp==$vilen_)
    {
    array_push($vareturn,$vstmp);
    $vitmp=0;
    $vstmp='';
    }
    $vscharacter=substr($vsstr_,$viindex,1);
    $vsrealcharacter=substr($vsstr_,$viindex,1);
    if(!strlen($vsrealcharacter))
    {
    array_push($vareturn,$vstmp);
    $vitmp=0;
    $vstmp='';
    break;
    }
    }
    return($vareturn);
    }
    function BabySplit2($vsstr_,$vilen_,$vimode)
    {
    $vareturn=array();
    $viindex=0;
    $vitmp=0;
    $vstmp='';
    $vicncharaterend=0;
    $vscharacter=substr($vsstr_,$viindex,1);
    $vsrealcharacter=substr($vsstr_,$viindex,1);
    $vsrealcharacter2=substr($vsstr_,$viindex+1,1);
    while(strlen($vsrealcharacter))
    {
    $viindex++;
    $vitmp++;
    if(ord($vscharacter)<0 || ord($vscharacter)>127)
    {
    if($vicncharaterend==0)
    {
    $vicncharaterend=1;
    $vstmp=$vstmp.$vscharacter;
    }
    else
    {
    $vicncharaterend=0;
    $vstmp=$vstmp.$vscharacter;
    if($vitmp>=$vilen_)
    {
    array_push($vareturn,$vstmp);
    $vitmp=0;
    $vstmp='';
    }
    elseif($vitmp+1==$vilen_ && $vimode==1)
    {
    if(ord($vsrealcharacter2)<0 || ord($vsrealcharacter2)>127)
    {
    array_push($vareturn,$vstmp);
    $vitmp=0;
    $vstmp='';
    }
    }
    elseif($vitmp==$vilen_+1 && $vimode==0)
    {
    if(ord($vsrealcharacter2)<0 || ord($vsrealcharacter2)>127)
    {
    array_push($vareturn,$vstmp);
    $vitmp=0;
    $vstmp='';
    }
    }
    }
    }
    else
    {
    $vstmp=$vstmp.$vscharacter;
    if($vitmp==$vilen_)
    {
    array_push($vareturn,$vstmp);
    $vitmp=0;
    $vstmp='';
    }
    elseif($vitmp+1==$vilen_ && $vimode==1)
    {
    if(ord($vsrealcharacter2)<0 || ord($vsrealcharacter2)>127)
    {
    array_push($vareturn,$vstmp);
    $vitmp=0;
    $vstmp='';
    }
    }
    elseif($vitmp==$vilen_+1 && $vimode==0)
    {
    if(ord($vsrealcharacter2)<0 || ord($vsrealcharacter2)>127)
    {
    array_push($vareturn,$vstmp);
    $vitmp=0;
    $vstmp='';
    }
    }
    }
    $vscharacter=substr($vsstr_,$viindex,1);
    $vsrealcharacter=substr($vsstr_,$viindex,1);
    $vsrealcharacter2=substr($vsstr_,$viindex+1,1);
    if(!strlen($vsrealcharacter))
    {
    array_push($vareturn,$vstmp);
    $vitmp=0;
    $vstmp='';
    break;
    }
    }
    return($vareturn);
    }
    ?>
      

  6.   

    babystudio(babystudio) 太谢谢你了,
    上次就看到你解决了个这个方面的问题,我回去一定试试!
      

  7.   

    问题归结就是处理中文字符,只要能分辨中文字符即可了。
    下面这个程序即可处理。
    /*-------------------------------------------------------------------------*/
    //
    // Chinese substr Function
    //
    /*-------------------------------------------------------------------------*/

    function gb_substr($str,$start,$len) // 

    if (strlen($str)>$len)

    $strlen=$start+($len-4); 
    for($i=0;$i<$strlen;$i++) 

    if(ord(substr($str,$i,1))>0xa0) 

    $tmpstr.=substr($str,$i,2); 
    $i++; 

    else

    $tmpstr.=substr($str,$i,1); 


    return $tmpstr; 

    else 

    return $str; 

    }
      

  8.   

    to tntxhy(落日使者) 
    谢谢你,我该怎么使用你的函数,对不起,我编程,真的不太好:)
    to babystadio
    你上面的方法怎么才可以中文按按中文字体显示,英文按英文自己显示呢?
      

  9.   

    to babystadio
    我这里的中文字体假定已经有了个设定字体的函数了set_cn_font()和set_en_font(),只要引用就可以(引用的时候随便怎么表示都可以)(字符串里的字符都经过字体设置过就可以了)