逍遥一派 发表于 2015-2-4 00:11:06

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);
   $length += strlen($match);
   $i += strlen($match)-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:53

其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。

分手快乐 发表于 2015-2-7 19:41:55

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。

乐观 发表于 2015-2-13 01:50:32

php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)

金色的骷髅 发表于 2015-2-13 21:20:45

因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax

再见西城 发表于 2015-2-23 02:59:00

小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。

小女巫 发表于 2015-2-26 20:46:19

我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。

再现理想 发表于 2015-3-7 00:09:52

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

简单生活 发表于 2015-3-7 04:09:43

遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。

谁可相欹 发表于 2015-3-10 13:10:09

爱上php,他也会爱上你。

飘灵儿 发表于 2015-3-12 21:12:29

因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax

仓酷云 发表于 2015-3-20 02:35:27

对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。

因胸联盟 发表于 2015-3-22 05:06:58

多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。

灵魂腐蚀 发表于 2015-3-27 16:10:44

其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎

不帅 发表于 2015-3-31 05:25:21

不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。

透明 发表于 2015-4-6 22:10:00

对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。

兰色精灵 发表于 2015-4-22 02:12:24

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

爱飞 发表于 2015-5-4 11:01:23

兴趣是最好的老师,百度是最好的词典。

admin 发表于 2015-5-4 18:10:48

作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。

莫相离 发表于 2015-5-12 00:42:39

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
页: [1] 2
查看完整版本: PHP网站制作之PHP截取中文字符串的成绩