正在上传文件反正无聊 就把php无乱码截取写出来吧`

参数说明

gbk    字符编码中,存储中文字符要2个字节

uft-8  字符编码中,存储中文字符要3个字节

0xa0  半个汉字

ord()— 返回字符的 ASCII 码值

chr() — 返回指定的字符


在网上我也看到一些截取中文的函数 但是我认为他们是有缺陷的 如不能区别utf-8  gbk的字符集 中文 于是我自己写了一个

但是我却发现我写的函数其实是用mb系列函数 ,我也是廋少不了

header("content-type:text/html; charset = gbk");
function chinesesubstr($str,$star,$len,$char_set='uft8'){
$tmpstr = null;
$char_set=='gbk'?$char_set=2:$char_set=3; //根据不同的字符集 来截取不同的长度
$strlen = $star+$len;
for( $i=0;$i<$strlen;$i++ ){
if(ord(substr($str,$i,1))>0xa0){
$tmpstr .= substr($str,$i,$char_set);
$i++;
}else{
$tmpstr .= substr($str,$i,1);
}
}
return $tmpstr;
}
//中文(中文特殊符号->有一些事不区分中英的#%*等):3 数字:1 字母(特殊符号):1
echo chinesesubstr('玩儿qqq额外人听闻',0,5,'gbk');

所以还是老老实实的写一个mb系列的函数吧

function chinesesubstr($str,$star=0,$len,$encoding ='utf8'){
$strlen = mb_strlen($str, $encoding);
if($strlen < $len){
return $str;
}else{
$re_turn = mb_substr($str,$star,$len,$encoding).chr(0).'...';
return $re_turn;
}
}
$str = "这个新闻或是文章的标题很长,需要只显示前面一些字,后面用...来代替";
echo chinesesubstr($str,0,5);

知识点终结

当汉字被截断时,根据编码规则他总是要把后边的其他字符拉过来一起作为汉字解释,

这就是出现乱码的原因。而值为0x81到0xff与0x00组合始终都显示为“空” 根据这一特点,

在substr的结果后面补上一个chr(0),就可以防止出现乱码了

chr(0)相关知识: 
null是什么都没有,而chr(0)的值是0。表示成16进制是0x00,表示成二进制是00000000  
虽然chr(0)不会显示出什么,但是他是一个字符。

PHP中文无乱码截取的更多相关文章

  1. PHP截取中文无乱码函数——cutstr

    转载:http://blog.sina.com.cn/s/blog_694c144f010179wj.html 真正好用的PHP截取中文无乱码函数——cutstr (2012-07-09 11:17: ...

  2. php实现中文字符串无乱码截取

    在PHP开发中会经常用到字符串截取,有的时候字符串截取会出现乱码的情况,那么怎么解决这个问题呢,其实也很容易 首先我们要了解关于中英文占多少字节的问题. ASCII码:一个中文汉字占两个字节的空间. ...

  3. php字符串无乱码截取函数封装

    /** * * 中英混合字符串长度判断 * @param unknown_type $str * @param unknown_type $charset */ function strLength( ...

  4. php截取中文无乱码

    在PHP中需要对字符串进行截取,如果没有装mb扩展(mb_substr函数),对中文截取就需要进行相应的处理.下面是对字符串 "世s界s的功s\\\夫萨的mn是非得失sdf dsf dsf ...

  5. ANSI转UTF-8中文无乱码解决方案

    近期做的项目需要使用Doxygen生成文档,由于前期代码不是本人完成,他使用的是ANSI格式的文件,后来我用Notepad++写其他文件时,默认保存为UTF-8 无BOM编码格式,因此整个项目文件中既 ...

  6. 如何让win2008服务器显示中文无乱码

    使用Windows Server 2008 R2 IIS搭建FTP服务器时,客户端登录FTP后中文文件夹显示为乱码,应在“控制面板”-“区域和语言”中查看“当前系统区域设置”的情况. 应确保“非Uni ...

  7. php中文截取无乱码方法

    直接使用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半.解决办法: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了. ...

  8. PHP实现中文截取无乱码

    字符串的处理是编程中比较常见的,各种编程语言对字符串的处理也提供了大量函数,像php中mb_substr()函数可以实现对中文字符串的截取,如何使用自定义方法实现中文字符串截取无乱码这也是面试经常遇到 ...

  9. PHP实现中文字符串截取无乱码

    在我们学习PHP知识的过程中,PHP截取字符串应该是一个非常常见的字符串基础操作了,想必大家都比较熟悉这方面知识点. 但是有些新手朋友们可能遇到过,当截取中英文字符串时出现乱码的情况,其实这个也是非常 ...

随机推荐

  1. linux系统一些信息(待整理)

    Linux查看物理CPU个数.核数.逻辑CPU个数 复制代码 # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 ...

  2. python(列表推导式和生成器表达式)

    从母鸡下蛋的故事讲起 老母鸡 = ('鸡蛋%s'%i for i in range(10)) print(老母鸡) for 蛋 in 老母鸡: print(蛋) g = (i*i for i in r ...

  3. Struts1.3——使用MyEclipse集成工具开发Struts

    前面两篇通过手工写代码,手工配置struts-config.xml文件的方法来开发了一个最简单的struts项目,通过手工的方式旨在学习底层原理细节.当熟悉了以后,我们就不需要再通过纯手工的方式来开发 ...

  4. mysql 安装运行学习过程中的报错问题

    错误记录(windows端): 问题1:在启动MYSQL时出现问题:“ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' ...

  5. 使用LoadRunner监控Apache

    前提本文使用的是lampp环境下自带的Apache服务 一.查看文件 查看文件确保目录中有Apache,我在这里使用的是用xampp自带apache [root@besttest ~]# ll 二.配 ...

  6. java入门之:Hello World

    import java.util.Scanner; public class HelloWorld{ public static void main(String[] args){ //向终端打印he ...

  7. springboot Service层单元测试

    两个实现类实现同一个Service接口 public interface CustomUrlService { List<ShopMetrics> getShopMetrics(); } ...

  8. expect的模式

    expect的模式其实就是对话模式: expect    # 期望什么 send      # 我给你什么 比如: expect "password: "    # 碰到什么了 s ...

  9. SpringBoot 应用程序启动过程探秘

    概述 说到接触 SpringBoot 伊始,给我第一映像最深的是有两个关键元素: 对照上面的典型代码,这个两个元素分别是: @SpringBootApplication SpringApplicati ...

  10. Java中super关键字的位置

    1.子类的构造函数如果要引用super的话,必须把super放在函数的首行. 例如: class Base  { Base()  {  System.out.println("Base&qu ...