仓酷云

标题: PHP网站制作之PHP截取中文字符串的成绩 [打印本页]

作者: 逍遥一派    时间: 2015-2-4 00:11
标题: PHP网站制作之PHP截取中文字符串的成绩
开发相册系统过程中就有过这样的问题,因为没有交流好,出现重复工作问题,因为文档没有详细的说明而经常临时问对方。成绩|中文|字符串      以下代码试用于GB2312编码,截取中文字符串是PHP中一个头疼的成绩,处理办法是依据值是不是大于等于128来判别是不是是双字节字符,以免呈现乱码的情形。但中英文夹杂、特别符号等成绩老是存在,如今写一个对照周全的,仅供参考:
   
  法式申明:
  1. len 参数以中文字符为尺度,1len等于2个英文字符,为了模式上悦目些
  2. 假如将magic参数设为false,则中文和英文比量齐观,取相对的字符数
  3. 出格合用于用htmlspecialchars()停止过编码的字符串
  4. 能准确处置GB2312中实体字符形式(𖰰)
   
  法式代码:
   
   
  function FSubstr($title,$start,$len="",$magic=true)
  {
  /**
   * powered by Smartpig
   * mailto:d.einstein@263.net
   */
   
  $length = 0;
  if($len == "") $len = strlen($title);
   
  //判别肇端为不准确地位
  if($start > 0)
  {
   $cnum = 0;
   for($i=0;$i<$start;$i++)
   {
   if(ord(substr($title,$i,1)) >= 128) $cnum ++;
   }
   if($cnum%2 != 0) $start--;
   
   unset($cnum);
  }
   
  if(strlen($title)<=$len) return substr($title,$start,$len);
   
  $alen = 0;
  $blen = 0;
   
  $realnum = 0;
   
  for($i=$start;$i<strlen($title);$i++)
  {
   $ctype = 0;
   $cstep = 0;
   $cur = substr($title,$i,1);
   if($cur == "&")
   {
   if(substr($title,$i,4) == "<")
   {
   $cstep = 4;
   $length += 4;
   $i += 3;
   $realnum ++;
   if($magic)
   {
   $alen ++;
   }
   }
   else if(substr($title,$i,4) == ">")
   {
   $cstep = 4;
   $length += 4;
   $i += 3;
   $realnum ++;
   if($magic)
   {
   $alen ++;
   }
   }
   else if(substr($title,$i,5) == "&")
   {
   $cstep = 5;
   $length += 5;
   $i += 4;
   $realnum ++;
   if($magic)
   {
   $alen ++;
   }
   }
   else if(substr($title,$i,6) == """)
   {
   $cstep = 6;
   $length += 6;
   $i += 5;
   $realnum ++;
   if($magic)
   {
   $alen ++;
   }
   }
   else if(substr($title,$i,6) == "'")
   {
   $cstep = 6;
   $length += 6;
   $i += 5;
   $realnum ++;
   if($magic)
   {
   $alen ++;
   }
   }
   else if(preg_match("/&#(\d+);/i",substr($title,$i,8),$match))
   {
   $cstep = strlen($match[0]);
   $length += strlen($match[0]);
   $i += strlen($match[0])-1;
   $realnum ++;
   if($magic)
   {
   $blen ++;
   $ctype = 1;
   }
   }
   }else{
   if(ord($cur)>=128)
   {
   $cstep = 2;
   $length += 2;
   $i += 1;
   $realnum ++;
   if($magic)
   {
   $blen ++;
   $ctype = 1;
   }
   }else{
   $cstep = 1;
   $length +=1;
   $realnum ++;
   if($magic)
   {
   if(ord($cur) >= 65 && ord($cur) <= 90)
   {
   $blen++;
   }else{
   $alen++;
   }
   }
   }
   }
   
   if($magic)
   {
   if(($blen*2+$alen) == ($len*2)) break;
   if(($blen*2+$alen) == ($len*2+1))
   {
   if($ctype == 1)
   {
   $length -= $cstep;
   break;
   }else{
   break;
   }
   }
   }else{
   if($realnum == $len) break;
   }
  }
   
  unset($cur);
  unset($alen);
  unset($blen);
  unset($realnum);
  unset($ctype);
  unset($cstep);
   
  return substr($title,$start,$length);
  }
   
  呵呵,一会儿把UTF-8编码下的代码也贴出来
一些真正的强人总会搞出新玩意来丢给你,你不学就落后了,也印证了前人的经验,果然是学无止境啊!
作者: 山那边是海    时间: 2015-2-4 09:52
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
作者: 分手快乐    时间: 2015-2-7 19:41
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
作者: 乐观    时间: 2015-2-13 01:50
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
作者: 金色的骷髅    时间: 2015-2-13 21:20
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 再见西城    时间: 2015-2-23 02:59
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
作者: 小女巫    时间: 2015-2-26 20:46
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
作者: 再现理想    时间: 2015-3-7 00:09
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
作者: 简单生活    时间: 2015-3-7 04:09
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者: 谁可相欹    时间: 2015-3-10 13:10
爱上php,他也会爱上你。
作者: 飘灵儿    时间: 2015-3-12 21:12
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 仓酷云    时间: 2015-3-20 02:35
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
作者: 因胸联盟    时间: 2015-3-22 05:06
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者: 灵魂腐蚀    时间: 2015-3-27 16:10
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
作者: 不帅    时间: 2015-3-31 05:25
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
作者: 透明    时间: 2015-4-6 22:10
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 兰色精灵    时间: 2015-4-22 02:12
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
作者: 爱飞    时间: 2015-5-4 11:01
兴趣是最好的老师,百度是最好的词典。
作者: admin    时间: 2015-5-4 18:10
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
作者: 莫相离    时间: 2015-5-12 00:42
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
作者: 只想知道    时间: 2015-5-12 01:30
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2