如何把汉字和数字混合的字符串正确地截断? 既然你可以使用mbstring扩展那么mb_substr不就可以了吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样吗???$s = '当在1串汉字中只有一个数字时';for($i=0; $i<mb_strlen($s); $i++) echo mb_substr($s, 0, $i).'<br>'; 大家试试这行程序看会不会出现乱码$s=mb_strimwidth("万里咨询简报第5期(总第6期)",0,20,"…") 奇怪,为什么我得到的是万里咨询简报第5期!?/a> 会不会是PHP.INI中设置的编码跟你的PHP页面的编码不一样? 回yoyun() :php.ini和页面的编码在是在哪一行设置呢 系统是win2000 server spk4apache2.0.52 我用的是 php5.0.3 for win32这是一个最少有人投诉的版本,除了已知的但开发组不愿修改或无力修改的BUG外,几乎没有问题 在php.ini里面设置mbstring.internal_encoding = gbk或者你用那个函数的时候加最后一个参数为gbk:$s=mb_strimwidth("万里咨询简报第5期(总第6期)",0,20,"…",'gbk'); 不过不建议用mbstring,我以前测试过,速度会慢大概30多倍。截取中文字符串的类网上多的是,你可以搜索一下试试看! utf-8的//$cutlength 为截取的长度(即字数) function csubstr($sourcestr,$aa,$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);//ascii码 if ($ascnum>=224) { $returnstr=$returnstr.substr($sourcestr,$i,3); $i=$i+3; $n++; }elseif ($ascnum>=192) { $returnstr=$returnstr.substr($sourcestr,$i,2); $i=$i+2; $n++; }else { $returnstr=$returnstr.substr($sourcestr,$i,1); $i=$i+1; $n=$n+0.5; } } return $returnstr; } ----------------------------------------------------------------------big5&gb2312function csubstr($str,$start,$len) { $strlen=strlen($str); if ($start>=$strlen) return $str; $clen=0; for($i=0;$i<$strlen;$i++,$clen++) { if(ord(substr($str,$i,1))>0xa0) { if ($clen>=$start) $tmpstr.=substr($str,$i,2); $i++; } else { if ($clen>=$start) $tmpstr.=substr($str,$i,1); } if ($clen>=$start+$len) break; } return $tmpstr; } 2字節的function ExecuteQuery($sql,$lan="Big5") // { $res; $sql=trim($sql); if (strlen($sql)==0) return false; if (strtoupper(substr($sql,0,4))=="SELE") $action="select"; else $action="execute"; $result=mysql_query($sql); if (!$result) { $error_msg=mysql_error(); require "error.php"; } else { if ($action=="execute") return true; else { /* if ($lan=="BIG5") { $tgtob=new gtob(); } */ while($row=mysql_fetch_array($result)) { while(list($k,$v)=each($row)) { if (is_string($v)) /* if ($lan=="BIG5") { $vv=trim($tgtob->gbtobig5($v)); } else */ $vv=trim($v); $row[$k]=$vv; } $res[]=$row; } mysql_free_result($result); return $res; } } } 求助,我后台有一个无限级分类树菜单表,我在前台调用此表,怎么才有级数地调用出来 apache + php 的运行环境配置程序 php5.3.1支持多继承? int 问题 快来啊我在php中发现的一个问题 寻求一个算法,是围绕一个已知数组作数据处理,请帮忙! 急!如何用文本框提交表单? 急聘PHP程序员 我勒个去。。。面试题只得了15分... php7.1 如何根据 this 取得数组索引值? 只能用 javascript 关于$rst=mysql_fetch_object($result);求教导!!!!
for($i=0; $i<mb_strlen($s); $i++)
echo mb_substr($s, 0, $i).'<br>';
$s=mb_strimwidth("万里咨询简报第5期(总第6期)",0,20,"…")
万里咨询简报第5期!?/a>
php.ini和页面的编码在是在哪一行设置呢
apache2.0.52
这是一个最少有人投诉的版本,除了已知的但开发组不愿修改或无力修改的BUG外,几乎没有问题
$s=mb_strimwidth("万里咨询简报第5期(总第6期)",0,20,"…",'gbk');
//$cutlength 为截取的长度(即字数)
function csubstr($sourcestr,$aa,$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);//ascii码
if ($ascnum>=224)
{
$returnstr=$returnstr.substr($sourcestr,$i,3);
$i=$i+3;
$n++;
}elseif ($ascnum>=192)
{
$returnstr=$returnstr.substr($sourcestr,$i,2);
$i=$i+2;
$n++;
}else
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1;
$n=$n+0.5;
}
}
return $returnstr; }
----------------------------------------------------------------------
big5&gb2312
function csubstr($str,$start,$len)
{
$strlen=strlen($str);
if ($start>=$strlen)
return $str;
$clen=0;
for($i=0;$i<$strlen;$i++,$clen++)
{
if(ord(substr($str,$i,1))>0xa0)
{
if ($clen>=$start)
$tmpstr.=substr($str,$i,2);
$i++;
}
else
{
if ($clen>=$start)
$tmpstr.=substr($str,$i,1);
}
if ($clen>=$start+$len)
break;
}
return $tmpstr;
}
function ExecuteQuery($sql,$lan="Big5") //
{
$res;
$sql=trim($sql);
if (strlen($sql)==0)
return false;
if (strtoupper(substr($sql,0,4))=="SELE")
$action="select";
else
$action="execute";
$result=mysql_query($sql);
if (!$result)
{
$error_msg=mysql_error();
require "error.php";
}
else
{
if ($action=="execute")
return true;
else
{
/*
if ($lan=="BIG5")
{
$tgtob=new gtob();
}
*/
while($row=mysql_fetch_array($result))
{
while(list($k,$v)=each($row))
{
if (is_string($v))
/*
if ($lan=="BIG5")
{
$vv=trim($tgtob->gbtobig5($v));
}
else
*/
$vv=trim($v);
$row[$k]=$vv;
}
$res[]=$row;
}
mysql_free_result($result);
return $res;
}
} }