PHP中文无乱码截取
正在上传文件反正无聊 就把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中文无乱码截取的更多相关文章
- PHP截取中文无乱码函数——cutstr
转载:http://blog.sina.com.cn/s/blog_694c144f010179wj.html 真正好用的PHP截取中文无乱码函数——cutstr (2012-07-09 11:17: ...
- php实现中文字符串无乱码截取
在PHP开发中会经常用到字符串截取,有的时候字符串截取会出现乱码的情况,那么怎么解决这个问题呢,其实也很容易 首先我们要了解关于中英文占多少字节的问题. ASCII码:一个中文汉字占两个字节的空间. ...
- php字符串无乱码截取函数封装
/** * * 中英混合字符串长度判断 * @param unknown_type $str * @param unknown_type $charset */ function strLength( ...
- php截取中文无乱码
在PHP中需要对字符串进行截取,如果没有装mb扩展(mb_substr函数),对中文截取就需要进行相应的处理.下面是对字符串 "世s界s的功s\\\夫萨的mn是非得失sdf dsf dsf ...
- ANSI转UTF-8中文无乱码解决方案
近期做的项目需要使用Doxygen生成文档,由于前期代码不是本人完成,他使用的是ANSI格式的文件,后来我用Notepad++写其他文件时,默认保存为UTF-8 无BOM编码格式,因此整个项目文件中既 ...
- 如何让win2008服务器显示中文无乱码
使用Windows Server 2008 R2 IIS搭建FTP服务器时,客户端登录FTP后中文文件夹显示为乱码,应在“控制面板”-“区域和语言”中查看“当前系统区域设置”的情况. 应确保“非Uni ...
- php中文截取无乱码方法
直接使用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半.解决办法: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了. ...
- PHP实现中文截取无乱码
字符串的处理是编程中比较常见的,各种编程语言对字符串的处理也提供了大量函数,像php中mb_substr()函数可以实现对中文字符串的截取,如何使用自定义方法实现中文字符串截取无乱码这也是面试经常遇到 ...
- PHP实现中文字符串截取无乱码
在我们学习PHP知识的过程中,PHP截取字符串应该是一个非常常见的字符串基础操作了,想必大家都比较熟悉这方面知识点. 但是有些新手朋友们可能遇到过,当截取中英文字符串时出现乱码的情况,其实这个也是非常 ...
随机推荐
- 【Java架构:基础技术】一篇文章搞掂:Spring Boot 官方文档解读
本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文内容大部分是翻译和总结官方文档,可以到https://docs.spring.io/spring-boot/docs查看(此地 ...
- Java BIO socket
package org.rx.socks; import lombok.extern.slf4j.Slf4j; import org.rx.core.LogWriter; import org.rx. ...
- Oracle 用户概念与基本操作
目录 目录 Oracle的用户 通过系统用户来登陆SQLPlus system和sys的区别 查看登陆的用户 启用和锁定一个用户 启用用户 锁定用户 创建用户 修改用户 删除用户 角色权限 常用的用户 ...
- angular5引入sass
angular/cli支持使用sass新建工程:如果是新建一个angular工程采用sass:ng new My_New_Project --style=sass这样所有样式的地方都将采用sass样式 ...
- HDU 3746 Cyclic Nacklace (KMP找循环节)
题目链接:HDU 3746 Sample Input 3 aaa abca abcde Sample Output 0 2 5 Author possessor WC Source HDU 3rd & ...
- Visual Studio 2013创建并运行Cocos2d-x工程
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.准备: 我们得先把Visual Studio 2013安装好:可以去MSDN官网下载,在安装好 2.安装好vs之后,在cmd(终端)创 ...
- php的闭包函数use的使用
PHP在默认情况下,匿名函数不能调用所在代码块的上下文变量,而需要通过使用use关键字. function getMoney() { $rmb = 1; $dollar = 6; $fun ...
- 14-vim-替换命令-01-替换
命令 英文 功能 工作模式 r replace 替换当前字符 命令模式 R replace 进入替换模式 替换模式 R命令进入替换模式,输入新字符替换当前光标所在位置的字符,替换完成后,按下ESC可以 ...
- springboot Service层单元测试
两个实现类实现同一个Service接口 public interface CustomUrlService { List<ShopMetrics> getShopMetrics(); } ...
- python之使用多个界定符分割字符串
主要是正则的编写 mport re line = 'asdf fjdk; afed, fjek,asdf, foo' # \s 匹配任意空白符,正则意思:分隔符可以是逗号,分号或者是空格,并且后面紧跟 ...