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截取字符串应该是一个非常常见的字符串基础操作了,想必大家都比较熟悉这方面知识点. 但是有些新手朋友们可能遇到过,当截取中英文字符串时出现乱码的情况,其实这个也是非常 ...
随机推荐
- select into outfile的sql语句
SELECT INTO…OUTFILE语句把表数据导出到一个文本文件中,并用LOAD DATA …INFILE语句恢复数据.但是这种方法只能导出或导入数据的内容,不包括表的结构,如果 ...
- ios 最全的常用字符串操作
1.将NSData / NSString转化 1 2 3 NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; // 将字符串 ...
- java == 和equals()
== == 是运算符 :可以使用在基本数据类型变量和引用数据类型变量当中 : 如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等(不一定类型相同) 如果比较的是引用数据类型变量, 比较两个对 ...
- 用cd 命令进入和退出D盘文件夹的操作步骤。
Windows键+R打开运行 输入cmd敲回车,打开命令提示符程序. 输入“cd..”敲回车会退回到上一级目录. 输入“cd\”敲回车会直接退回到C盘根目录 在CMD程序里输入“d:”敲回车可以进入D ...
- Cocos2d-x之Layer
| 版权声明:本文为博主原创文章,未经博主允许不得转载. Layer是处理玩家事件响应的Node子类.与场景不同,层通常包含的是直接在屏幕上呈现的内容,并且可以接受用户的输入事件,包括触摸,加速度 ...
- Money
/** * www.yiji.com Inc. * Copyright (c) 2012 All Rights Reserved. */package com.yjf.common.lang.util ...
- 通往大神之路,百度Java面试题前200页。
基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie ...
- redis的一些特性
Redis内存回收 Redis复制原理 Redis提供的高可用方案 Redis提供的分片算法 Redis迁移
- c# 关于DataTable
1.DataRow数组 转DataTable using (SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=123;da ...
- ios执行失去焦点,不执行点击事件
原因:由于JavaScript为单线程,同一时间只能执行处理一个事件.“blur优先于click执行”.而在本示例中,由于blur处理程序,会将对下拉框展示区隐藏,所以导致其后续click事件并不会执 ...