这里提供两个函数,set_cn_font()和set_en_font(),
经过set_cn_font()处理的中文的长度正好等于用set_en_font()处理过的字母或者其他符号
的长度的两倍,这两个函数可以自由调用,要求中文必须经过set_cn_font()处理过,字母及
其他符号必须经过set_en_font(),不然会有乱码出现。不知道各位看懂了没有,
哪位大哥帮帮忙吧。。
经过set_cn_font()处理的中文的长度正好等于用set_en_font()处理过的字母或者其他符号
的长度的两倍,这两个函数可以自由调用,要求中文必须经过set_cn_font()处理过,字母及
其他符号必须经过set_en_font(),不然会有乱码出现。不知道各位看懂了没有,
哪位大哥帮帮忙吧。。
我在解释一下(可能越说越不明白)
set_cn_font()和set_en_font(),是我虚拟出来的,各位只要调用就可以了
我最终的目的就是把这个字符串显示出来
比如我有个字符串是"我我我现在sfd很23糊涂,不知道sdfje929dfl该怎么办。"
我想把她分段显示出来,比如每段是5个字,我想要的结果是我我我现在
sfd很23糊
涂,不知道
sdfje929df
l该怎么办
。
这里面的每个中文都必须用set_cn_font()处理过,字母数字等必须用set_en_font处理过现在不知道我说清楚了吗,哎
请各位帮帮忙:)
你不过就是想让它分行吗?
在HEAD里加上这么一行:
<STYLE>.WithBreaks { word-wrap:break-word;width:400}</STYLE>
再在你想分行的表格的TD里这样写:
<td class="WithBreaks">
不知我理解的对不!不对请多谅解啊^_^
都不好用,没有类似html里面用的分行方法,好象都要自己来控制输出字符的位置,生成pdf文件还要涉及到字体问题,不控制字体就会全是乱码,好麻烦,哎谢谢上面大哥:)
帮小弟一下吧:)
/**********************************************
* 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);
}
?>
---------------<?
/**********************************************
* 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);
}
?>
上次就看到你解决了个这个方面的问题,我回去一定试试!
下面这个程序即可处理。
/*-------------------------------------------------------------------------*/
//
// 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;
}
}
谢谢你,我该怎么使用你的函数,对不起,我编程,真的不太好:)
to babystadio
你上面的方法怎么才可以中文按按中文字体显示,英文按英文自己显示呢?
我这里的中文字体假定已经有了个设定字体的函数了set_cn_font()和set_en_font(),只要引用就可以(引用的时候随便怎么表示都可以)(字符串里的字符都经过字体设置过就可以了)