今天在写网站的时候用到了字符串的中英文截取,特此总结了一下:

1.根据网站的中文编码格式,采取不同的自定义函数。

1)PHP截取gb2312中英文字符串

<?php

//PHP截取gb2312中文字符串

/**

* PHP截取gb2312中文字符串

* @param $str 被截取的字符串

* @param $start 起始长度

* @param $len 截取长度

* @param $suffix 后缀字符串

*/

function gbk_str($str, $start, $len,$suffix=""){

$tmpstr = "";

$n=0;

$length = $start+$len;

echo $length."
";

for($i=0; $i

$value=ord(substr($str,$i,1));

echo $value."--
";

if($value>0xa0){

if($n>=$start && $n

$tmpstr .= substr($str,$i,2);

}

$i++;

}else{

if($n>=$start && $n

$tmpstr .= substr($str,$i,1);

}

}

}

return $tmpstr.$suffix;

}

//测试案例

$str = "测试字符串'abcdefg";

echo gbk_str($str,2,9,"...");

显示效果:

字符串'abcde...

2)PHP截取utf-8中英文字符串

原理:

UTF-8编码的字符可能由1~3个字节组成,

具体数目可以由第一个字节判断出来。

第一个字节大于239小于248的,它与它之后的3个字节组成一个UTF-8字符

第一个字节大于223小于240的,它与它之后的2个字节一起组成一个UTF-8字符

第一个字节大于191小于224的,它与它之后的1个字节组成一个UTF-8字符

否则第一个字节本身就是一个英文字符(包括数字和一小部分标点符号)。

注意:小写字母和半角标点等与半个高位字符宽

/**

* PHP截取utf-8中文字符串

* @param $str 被截取的字符串

* @param $start 起始长度

* @param $len 截取长度

* @param $suffix 后缀字符串

*/

function utf8_str($str,$start,$len,$suffix=""){

$tmpstr = "";

$n = 0;

$i = 0;

$length = $start+$len;

while($i

$value = ord($str[$i]);

if($value >= 65 && $value <= 90){//大写字母

if($n>=$start && $n

$tmpstr .= substr($str,$i,1);

}

$n++;

$i++;

}

elseif($value >= 192 && $value <= 223){

if($n>=$start && $n

$tmpstr .= substr($str,$i,2);

}

$n++;

$i+=2;

}

elseif($value >= 224 && $value <= 239){

if($n>=$start && $n

$tmpstr .= substr($str,$i,3);

}

$n++;

$i+=3;

}

elseif($value >= 240 && $value <= 247){

if($n>=$start && $n

$tmpstr .= substr($str,$i,4);

}

$n++;

$i+=4;

}

else{//其他情况下,包括小写字母和半角标点符号

if($n>=$start && $n

$tmpstr .= substr($str,$i,1);

}

$n += 0.5;

$i++;

}

}

if($n

return $tmpstr;

}else{

return $tmpstr.$suffix;

}

}

//测试案例

$str = "测试字符串'abcdefg";

echo utf8_str($str,2,9,"...");

显示效果:

字符串'abcdefg...

2.使用内置的PHP字符串截取函数,mb_substr()

1.要确保你的Windows/system32下有php_mbstring.dll这个文件,没有就从PHP安装目录extensions里拷入Windows/system32里面。

2.windows下的PHP目录中找到配置文件php.ini并打开,搜索mbstring.dll,找到;extension=php_mbstring.dll把前面的;号去掉

mb_substr — 获取字符串的部分

说明:

string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )

根据字符数执行一个多字节安全的 substr() 操作。 位置是从 str 的开始位置进行计数。 第一个字符的位置是 0。第二个字符的位置是 1,以此类推。

参数:

str

从该 string 中提取子字符串。

start

str 中要使用的第一个字符的位置。

length

str 中要使用的最大字符数。 If omitted or NULL is passed, extract all characters to the end of the string.

encoding

encoding 参数为字符编码。如果省略,则使用内部字符编码。

返回值

mb_substr() 函数根据 start 和 length 参数返回 str 中指定的部分。

函数如下:

function mystr($str,$start,$len,$charset,$suffix){

$tmpstr="";

$tmpstr .= mb_substr($str,$start,$len,$charset);

return $tmpstr."...";

}

$str1 = "这是一个悲伤的故事abcdefg";

echo mystr($str1,2,9,"utf-8","...");

php 截取字符串中的英文,PHP截取中英文字符串相关推荐

  1. 替换字符串中的英文括号为其他字符串

    只需在英文括号前加两个反斜杠即可, 如:String s = "(测试)helloword"; String s2 = s.replace("\\(",&quo ...

  2. isalnum()函数:找出str字符串中为英文字母或数字的字符

    找出str字符串中为英文字母或数字的字符 (1)Linux下编程用到的函数是:int isalnum(int c) 返回值:若参数c为字母或数字,则返回TRUE:否则返回NULL(0) #includ ...

  3. js 编写一个程序实现统计一串字符串中的英文小写字母个数!

    编写一个程序实现统计一串字符串中的英文小写字母个数!例 如:输入"axZvnNgOuyi",得到的值应该是 8: 注意:且有输入输出,直接输出不计分 <!DOCTYPE ht ...

  4. 经典:统计字符串中汉字,英文,数字,特殊符号个数

    经典:统计字符串中汉字,英文,数字,特殊符号个数 package wzs.arithmetics;/*** 分别统计出其中字符串中汉字,英文字母,数字,其他字符数量* @author wWX15478 ...

  5. 1. 编写函数 cal_numbers:参数为字符串,统计并返回该字符串中的英文字母、空格、数字和其它字符的个数

    1. 编写函数 cal_numbers:,参数为字符串,统计并返回该字符串中的英文字母.空格.数字和其它字符的个数,程序框架: def cal_numbers(strVal):计算 strVal 中, ...

  6. 输出英文字母,字符串中所有英文字符

    Description 给定一个字符串,将字符串中的所有英文字母找出并输出. Input 若干组数据,每组数据只有一个字符串. Output 字符串中所有英文字符. Sample Input abc1 ...

  7. 统计字符串中每个英文字母的个数

    题目:编程序,提示用户输入一任意长度的字符串,输出此字符串中每个英文字母的个数. 源程序代码: #include #include using namespace std; int main() { ...

  8. java 去除字符串中的英文_Java利用正则表达式去掉字符串中的英文

    利用正则表达式去掉字符串中的英文String str = "111,aaa,222,bbb"; Pattern p = Pattern.compile("[a-zA-z] ...

  9. JAVA版本:给定一个字符串,返回字符串中小写英文字母的个数、数字个数以及其他字符的个数

    给定一个字符串,返回字符串中小写英文字母的个数.数字个数以及其他字符的个数 方法分析:使用replaceAll()方法,逐一删除字符串中的相关数据,类型个数=原长度-新长度 public static ...

最新文章

  1. Oracle DBA课程系列笔记(19)
  2. Flutter快速入门 五步搞定Flutter环境配置
  3. 学生成绩等级评定python_马鞍山市初中学生综合素质评价工作政策解读来了!
  4. virtualbox+vagrant学习-2(command cli)-27-vagrant connect命令
  5. 给Source Insight做个外挂系列之一--发现Source Insight
  6. php状态,PHP 状态模式 - 304158的个人空间 - OSCHINA - 中文开源技术交流社区
  7. php自动加载什么时候用到,php的自动加载的使用
  8. linux下命令集合
  9. php语言输出九九乘法表_PHP 输出九九乘法表
  10. [李景山php]每天TP5-20161205|Loader.php-3
  11. 程序员让开,硅谷将是物理学家的天下,薪水高得离谱
  12. SSIS包生成注意事项
  13. 项目开发:网上书店(详细的开发流程记录)----注册登录功能,通过邮件验证
  14. 惯导系统测试方法及测试系统
  15. 市场app应用类型分类有哪些?app应用管理
  16. 2021-5-17:Spring Boot整合Redis
  17. 如何批量获取过期老域名
  18. 【论文笔记】用循环一致性避免形变场重叠的医学图像配准网络
  19. 滚动截屏APP—Faststone Capture破解版注册码
  20. 浅谈八百呼电销系统的基础功能

热门文章

  1. Linux软件包管理
  2. Horizon7发布完整克隆模式后,无法登录问题
  3. “技术人”频道头条新闻断链
  4. 至戒烟失败的自己且下定决心重新来过
  5. 宝塔面板配置PHP环境
  6. lisp点转为vla_怎样用AUTOLISP把选择的点连成多段线?求代码
  7. d盘不见了怎么恢复?数据恢复,一键操作
  8. 可以在Unix下编写桌面软件吗
  9. 《仙剑奇侠传3》战斗/打最终BOSS技巧
  10. 热搜警告:谁能想到我爬个长城,爬到一半还得加班呢?