linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > php >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·PHP生成静态页面的一些经验
·PHP无限分类与树型论坛的实现方
·php5学习笔记
·入门级PHP程序员面试题
·PHP 和 MySQL初学入门
·PHP入门速成
·vim的代码折叠
·文件下载统计php编程代码
·如何建立自己的新闻发布系统
·织梦CMS中文转换拼音函数研究
·Windows下Apache+Tomcat+MySQL
·PHP初学者头疼问题总结
·Cookie及其使用详细介绍
·生成sessionid和随机密码的例子
·使用无限生命期Session的方法
最新文章
·PHP入门速成
·用php实现广告轮播
·Zend Optimizer 问题浅析
·功能强大的CGI语言----PHP3
·用Session对Web页面进行保护
·PHP--进行模块化设计
·如何将PHP的结果输出到非PHP页
·如何开发一个虚拟域名系统
·PHP4调用自己编写的COM组件
·简单的页面缓冲技术(三)
·简单的页面缓冲技术(二)
·简单的页面缓冲技术(一)
·用Socket发送电子邮件(二)
·用Socket发送电子邮件(一)
·PHP/MySQL 购物车
Google
 
旧题新貌:PHP截取中文字符串的问题
[ 作者:  加入时间:2007-11-22 16:05:24  来自:Linux联盟收集整理 ]
以下代码试用于GB2312编码,截取中文字符串是PHP中一个头疼的问题,解决方法是根据值是否大于等于128来判断是否是双字节字符,以避免出现乱码的情况。但中英文混合、特殊符号等问题总是存在,现在写一个比较全面的,仅供参考: x38Linux联盟
   x38Linux联盟
  程序说明: x38Linux联盟
  1. len 参数以中文字符为标准,1len等于2个英文字符,为了形式上好看些 x38Linux联盟
  2. 如果将magic参数设为false,则中文和英文同等看待,取绝对的字符数 x38Linux联盟
  3. 特别适用于用htmlspecialchars()进行过编码的字符串 x38Linux联盟
  4. 能正确处理GB2312中实体字符模式(𖰰) x38Linux联盟
   x38Linux联盟
  程序代码: x38Linux联盟
   x38Linux联盟
   x38Linux联盟
  function FSubstr($title,$start,$len="",$magic=true) x38Linux联盟
  { x38Linux联盟
  /** x38Linux联盟
   * powered by Smartpig x38Linux联盟
   * mailto:d.einstein@263.net x38Linux联盟
   */ x38Linux联盟
   x38Linux联盟
  $length = 0; x38Linux联盟
  if($len == "") $len = strlen($title); x38Linux联盟
   x38Linux联盟
  //判断起始为不正确位置 x38Linux联盟
  if($start > 0) x38Linux联盟
  { x38Linux联盟
   $cnum = 0; x38Linux联盟
   for($i=0;$i<$start;$i++) x38Linux联盟
   { x38Linux联盟
   if(ord(substr($title,$i,1)) >= 128) $cnum ++; x38Linux联盟
   } x38Linux联盟
   if($cnum%2 != 0) $start--; x38Linux联盟
   x38Linux联盟
   unset($cnum); x38Linux联盟
  } x38Linux联盟
   x38Linux联盟
  if(strlen($title)<=$len) return substr($title,$start,$len); x38Linux联盟
   x38Linux联盟
  $alen = 0; x38Linux联盟
  $blen = 0; x38Linux联盟
   x38Linux联盟
  $realnum = 0; x38Linux联盟
   x38Linux联盟
  for($i=$start;$i<strlen($title);$i++) x38Linux联盟
  { x38Linux联盟
   $ctype = 0; x38Linux联盟
   $cstep = 0; x38Linux联盟
   $cur = substr($title,$i,1); x38Linux联盟
   if($cur == "&") x38Linux联盟
   { x38Linux联盟
   if(substr($title,$i,4) == "<") x38Linux联盟
   { x38Linux联盟
   $cstep = 4; x38Linux联盟
   $length += 4; x38Linux联盟
   $i += 3; x38Linux联盟
   $realnum ++; x38Linux联盟
   if($magic) x38Linux联盟
   { x38Linux联盟
   $alen ++; x38Linux联盟
   } x38Linux联盟
   } x38Linux联盟
   else if(substr($title,$i,4) == ">") x38Linux联盟
   { x38Linux联盟
   $cstep = 4; x38Linux联盟
   $length += 4; x38Linux联盟
   $i += 3; x38Linux联盟
   $realnum ++; x38Linux联盟
   if($magic) x38Linux联盟
   { x38Linux联盟
   $alen ++; x38Linux联盟
   } x38Linux联盟
   } x38Linux联盟
   else if(substr($title,$i,5) == "&") x38Linux联盟
   { x38Linux联盟
   $cstep = 5; x38Linux联盟
   $length += 5; x38Linux联盟
   $i += 4; x38Linux联盟
   $realnum ++; x38Linux联盟
   if($magic) x38Linux联盟
   { x38Linux联盟
   $alen ++; x38Linux联盟
   } x38Linux联盟
   } x38Linux联盟
   else if(substr($title,$i,6) == """) x38Linux联盟
   { x38Linux联盟
   $cstep = 6; x38Linux联盟
   $length += 6; x38Linux联盟
   $i += 5; x38Linux联盟
   $realnum ++; x38Linux联盟
   if($magic) x38Linux联盟
   { x38Linux联盟
   $alen ++; x38Linux联盟
   } x38Linux联盟
   } x38Linux联盟
   else if(substr($title,$i,6) == "'") x38Linux联盟
   { x38Linux联盟
   $cstep = 6; x38Linux联盟
   $length += 6; x38Linux联盟
   $i += 5; x38Linux联盟
   $realnum ++; x38Linux联盟
   if($magic) x38Linux联盟
   { x38Linux联盟
   $alen ++; x38Linux联盟
   } x38Linux联盟
   } x38Linux联盟
   else if(preg_match("/&#(\d+);/i",substr($title,$i,8),$match)) x38Linux联盟
   { x38Linux联盟
   $cstep = strlen($match[0]); x38Linux联盟
   $length += strlen($match[0]); x38Linux联盟
   $i += strlen($match[0])-1; x38Linux联盟
   $realnum ++; x38Linux联盟
   if($magic) x38Linux联盟
   { x38Linux联盟
   $blen ++; x38Linux联盟
   $ctype = 1; x38Linux联盟
   } x38Linux联盟
   } x38Linux联盟
   }else{ x38Linux联盟
   if(ord($cur)>=128) x38Linux联盟
   { x38Linux联盟
   $cstep = 2; x38Linux联盟
   $length += 2; x38Linux联盟
   $i += 1; x38Linux联盟
   $realnum ++; x38Linux联盟
   if($magic) x38Linux联盟
   { x38Linux联盟
   $blen ++; x38Linux联盟
   $ctype = 1; x38Linux联盟
   } x38Linux联盟
   }else{ x38Linux联盟
   $cstep = 1; x38Linux联盟
   $length +=1; x38Linux联盟
   $realnum ++; x38Linux联盟
   if($magic) x38Linux联盟
   { x38Linux联盟
   if(ord($cur) >= 65 && ord($cur) <= 90) x38Linux联盟
   { x38Linux联盟
   $blen++; x38Linux联盟
   }else{ x38Linux联盟
   $alen++; x38Linux联盟
   } x38Linux联盟
   } x38Linux联盟
   } x38Linux联盟
   } x38Linux联盟
   x38Linux联盟
   if($magic) x38Linux联盟
   { x38Linux联盟
   if(($blen*2+$alen) == ($len*2)) break; x38Linux联盟
   if(($blen*2+$alen) == ($len*2+1)) x38Linux联盟
   { x38Linux联盟
   if($ctype == 1) x38Linux联盟
   { x38Linux联盟
   $length -= $cstep; x38Linux联盟
   break; x38Linux联盟
   }else{ x38Linux联盟
   break; x38Linux联盟
   } x38Linux联盟
   } x38Linux联盟
   }else{ x38Linux联盟
   if($realnum == $len) break; x38Linux联盟
   } x38Linux联盟
  } x38Linux联盟
   x38Linux联盟
  unset($cur); x38Linux联盟
  unset($alen); x38Linux联盟
  unset($blen); x38Linux联盟
  unset($realnum); x38Linux联盟
  unset($ctype); x38Linux联盟
  unset($cstep); x38Linux联盟
   x38Linux联盟
  return substr($title,$start,$length); x38Linux联盟
  } x38Linux联盟
   x38Linux联盟
  呵呵,一会儿把UTF-8编码下的代码也贴出来 x38Linux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·使用PHP批量生成随机用户名  (2007-11-22 14:43:54)
 ·linux下编译php的配置参数总结  (2007-11-22 14:43:21)
 ·在PHP5中使用DOM控制XML  (2007-11-22 14:42:13)
 ·在debian下为PHP5.0.3安装pdo模块  (2007-11-22 14:41:42)
 ·PHP中模板分页的处理  (2007-11-22 14:40:53)
 ·PHP下实现端口复用劫持  (2007-11-22 14:40:24)
 ·使用php直接打开socket端口进行发信的小程序  (2007-11-22 14:39:52)
 ·PHP应用分页显示制作详细讲解  (2007-11-22 14:39:22)
 ·php作wap开发时遇到的问题  (2007-11-22 14:38:12)
 ·PHP IPwhois类  (2007-11-22 14:37:07)