怎样避免substr带来的乱码?

lanbor 2003-10-17 08:54:49
对于一个字符串,含有中文和英文。用substr经常出现乱码改怎么解决呢?

例如:

$s = substr($test_s, 0, 30);
...全文
421 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2003-10-18
  • 打赏
  • 举报
回复
1、可以使用mbstring扩展库的mb_substr,中文算一个
2、自己书写截取函数,http://www.csdn.net/Develop/read_article.asp?id=20454
3、仅为了输出截取的串:substr($test_s, 0, 30).chr(0);

楼上几位的中文取字串的函数是可用的。但是效率不高,功能上也较substr弱些。
2中的函数仅比mb_substr稍慢,功能与mb_substr和substr一样
ustcfrank 2003-10-18
  • 打赏
  • 举报
回复
up
blueoxygen 2003-10-17
  • 打赏
  • 举报
回复
**
* 截取中文部分字符串
*
* 截取指定字符串指定长度的函数,该函数可自动判定中英文,不会出现乱码
*
* @access public
* @param string $str 要处理的字符串
* @param int $strlen 要截取的长度默认为10
* @param string $other 是否要加上省略号,默认会加上
* @return string
*/
function showtitle($str,$strlen=10,$other=true) {
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;
}
feel8 2003-10-17
  • 打赏
  • 举报
回复
五个中文,截取单数个字符就有乱码。
cloudchen 2003-10-17
  • 打赏
  • 举报
回复
怎么样才能弄出问题来?我这里弄不出问题

我这里是iis5+php 4.3.3
myblessu 2003-10-17
  • 打赏
  • 举报
回复
function TrimChinese($str,$len){
$r_str='';
$i=0;
while ($i<$len){
$ch=substr($str,$i,1);
if(ord($ch)>0x80) $i++;
$i++;
}
$r_str=substr($str,0,$i);
return $r_str;
}
//取 $string 的前n个字符
echo TrimChinese($string,n);
feel8 2003-10-17
  • 打赏
  • 举报
回复
解决截取中文字符出现乱码的函数

function msubstr($str,$start,$len) {
$strlen=$start+$len;
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;
}

21,886

社区成员

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

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