如何截取中文字符串保证不出现乱码?

JiYangTX 2006-01-01 03:57:25
如何截取中文字符串保证不出现乱码?
如字符串 "a你好!还有好多字aaaa"截10个字怎么保证不出现乱码?
最好能给个代码
...全文
363 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
arcow 2006-01-02
  • 打赏
  • 举报
回复
/**
* 截取中文部分字符串
*
* 截取指定字符串指定长度的函数,该函数可自动判定中英文,不会出现乱码
*
* @access public
* @param string $str 要处理的字符串
* @param int $strlen 要截取的长度默认为10
* @param string $other 是否要加上省略号,默认会加上
* @return string
*/

function showtitle($str,$strlen=26,$other=false) {
for($i=0;$i<$strlen;$i++)
if(ord(substr($str,$i,1))>0xa0) $j++;
if($j%2!=0) $strlen++;
$rstr=substr($str,0,$strlen);
if (strlen($str)>$strlen && $other) {$rstr.='...';}
return $rstr;
}
JiYangTX 2006-01-02
  • 打赏
  • 举报
回复
还没人回就沉了,顶下
Fibona 2006-01-02
  • 打赏
  • 举报
回复
给一个我自己写的参考一下
/*
进行字符串的截取
$start:为子字符串的开始位置,
$len为子字符串的长度
$str为截取的字符串
返回$str中从start开始的,长度为len的字符串的长度

作者:(fibona)熊祥众

日期:2005年12月
*/
function KTSubstr($str,$start,$len)
{
if($start< 0 && $len < 0)
{
return $str;
}

if(($start+$len) >= strlen($str))
{

return substr($str,$start,$len);
}
else
{
$j=0;
$num=$len;
for($i=$start; $i< $num-1;$i++)
{
if(ord(substr($str,$i,1))>0xa0) $j++;
}
if($j%2!=0)
{
$num=$num+1;
}else
{
$num=$num;
}
return substr($str,$start,$num-1)."...";

/*
if(ord(substr($str,$start+$len,1))>0xa0)
{

$m_strlen=$len+1;
//echo $m_strlen;
//echo "<hr>";
}
else
{
$m_strlen=$len;
}

return substr($str,$str,$m_strlen-1);
*/
}
}

surfchen 2006-01-02
  • 打赏
  • 举报
回复
mb_string
thunderx 2006-01-02
  • 打赏
  • 举报
回复
做循环,一个一个的数下去,遇到中文字符就往下走一位,直到相应长度为止;
注意,判断中文字符的时候用0x80,0xa1只适合gb2312的,而0x80+是适合GBK的,保险一些!
函数简单举例如下:
function cutGBK($pString,$pLength,$sign='...'){
$length = strlen($pString);
if($pLength > $length) {
$res = $pString.$sign;
}else{
for($i=0;$i<=$pLength;$i++){
if (ord(substr($pString,$i,1)) > 0x80){
$res .= substr($pString,$i,2);
$i++;
}else{
$res .= substr($pString,$i,1);
}
}
}
return $res.$sign;
}

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧