php解决中文截取乱码问题

  针对截取字符串出现中文乱码问题,网上有很多介绍,也有很多函数,但笔者看着网上的函数,总感觉有点别扭,

  所以自己动手写了一个防止截取字符串时出现中文乱码的函数。

  实现的原理还是比较简单,主要是利用ASCII编码和中文编码的二进制范围不一致而把它们区分开来,然后,通过substr()截取字符串的函数实现的。

  下面给出我写的代码,注意:我这里只针对utf-8编码,其他编码,看官可以自己手动改一下函数,以便支持其他的编码。

<?php
header(‘content-type:text/html;charset=utf-8;‘);
$str = ‘利要a-符e:r ttnx节小-子s区。vh;peh。例t来个oe体字n代gb节看t通c eu是的soS至什tna过码 t;Ie看C实e/,字le A来具8y么a)n=于ndg是r于 0tmt现码 e0ssf8单下s(uo别e的以ieh过aatx和t接要u几这看 nsw Ihrr用字 mgtts上就eg cAei的nwo码e跳h,t编‘;
/*
*在某篇文章中截取一段字符串,多余的用省略号...表示,并且防止中文乱码
*$param1 string要截取的字符串 $str  注意:这里是utf-8编码
*$param2 int截取字符串的长度 $len
*返回值 成功返回所要截取的字符串,失败为空
*/
function str($str=‘‘,$len=0){
    //检查参数
    if(!is_string($str) && !is_int($len)){
        return ‘‘;
    }
    $length = strlen($str);
    if($length <= 0 ){
        return ‘‘;
    }
    if($len>$length){
        return $str.‘...‘;
    }
    //初始化,统计字符串的个数,
    $count = 0;
    for($i=0;$i<$length;$i++){
        //达到个数跳出循环,$i即为要截取的长度
        if($count == $len){
            break;
        }
        $count++;
        //ord函数是获取字符串的ASCII编码,大于等于十六进制0x80的字符串即为中文字符串
        if(ord($str{$i}) >= 0x80){
            $i +=2;//中文编码的字符串的长度再加2
        }
    }
    return substr($str,0,$i).‘...‘;
}
echo str($str,12);

  以上代码的实现就是利用单字节字符的ASCII码小于0x80。至于要跳过几个字节,这要看具体是什么编码。

  有什么错误,还望指出。

时间: 2024-08-09 19:54:06

php解决中文截取乱码问题的相关文章

PHP中的中文截取乱码问题_gb2312_utf-8

一.字符串编码为gb2312,一个中文占俩字节 ? public static function chinesesubstr($str, $start, $len) { // $str指字符串,$start指字符串的起始位置,$len指字符串长度         $strlen = $start + $len; // 用$strlen存储字符串的总长度,即从字符串的起始位置到字符串的总长度         for($i = $start; $i < $strlen;) {            

PHP文件上传并解决中文文件名乱码问题

PHP文件上传并解决中文文件名乱码问题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 if(isset($_FILES['file'])){ ? ????$upload='upload/'.$_FILES['file']['name']; ????? ????? ????if(is_uploaded_file($_FILES['file']['tmp_name'])){ ????????//iconv函数解决上传文件中文名乱码的问题,但是不提倡文

Struts2 .apk 文件下载及解决中文文件名乱码问题(转)

1.Tomcat服务器不能下载 .apk类型文件 Android的APK安装包不能下载或下载文件是以 .zip为后缀名而不是 .apk为文件后缀名时,需在 Tomcat 的 web.xml 配置文件中加入以下 MIME 类型: 1 <mime-mapping> 2 <extension>apk</extension> 3 <mime-type>application/vnd.android.package-archive</mime-type>

Arcgis for Android解决中文字体乱码的问题

首先,在此感谢Arcgis for Android群里的一位成员,大家可以加进来QQ群号:337469080. 不论是Arcgis for Android的哪个版本,都没无法解决中文乱码的问题,这个与Android中自带的字体库有关,可以参考http://mobile.51cto.com/android-265238.htm这篇文章. 所以,要在Arcgis for Android中显示中文,需要对字体进行设置,如下: TextSymbol ts = new TextSymbol(25, add

BeautifulSoup解决中文网页乱码

以下代码,在执行结果中的中文出现乱码. from bs4 import BeautifulSoup import urllib2 request = urllib2.Request('http://www.163.com') response = urllib2.urlopen(request) html_doc = response.read() soup = BeautifulSoup(html_doc) print soup.find_all('a') 因为中文页面编码是gb2312,gb

将中文库导入到ARM板子中以解决中文显示乱码的教程

1.将中文字符集导入到ARM板子中的/usr/fonts/目录下 在这里我们使用的字符集为:DroidSansFallback.ttf 下载地址为:https://pan.baidu.com/s/1ARn2Y6Vh6MsRhjHP18yMwQ 中文字符集具体的导入过程如下: (1)将字符集DroidSansFallback.ttf拷贝到SD卡中. (2)在板子的/usr目录下新建文件夹fonts,同时提高文件夹的权限. 命令如下: mkdir fonts chmod 777 fonts 命令 (

Debian 9.5 解决中文显示乱码

一.首先检查LOCALE情况 说明:DEBIAN因为基于GNU所以,对不同地域进行了不同的包支持,以LOCALE形式存在. 1.启动终端 #apt-get install locales 2.重新配置LOCALE #dpkg-reconfigure locales 在界面中我勾选的是“en_US.UTF-8”和“zh_CN.UTF-8”.然后选择zh_CN.UTF-8为默认的LOCALE,则系统为中文界面(这里也可以选en_US.UTF-8,使系统为英文界面). 3.运行LOCALE命令检查当前

使用pdfBox实现pdf转图片,解决中文方块乱码等问题

一.引入依赖 <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fontbox</artifactId> <version>2.0.13</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artif

MySQL数据库:完美解决中文数据乱码

首先声明:这是解决我的问题的方法,个人笔记,仅供参考. 环境:win server 2003 + MySQL5.0 + Navicat 10 问题现象:通过Java WEB 页面提交数据到MySQL数据,发生中文乱码,每个汉字显示为?号,例如:"标题1"显示为"??1". 解决方法:找到MySQL5.0安装目录下编辑打开my.ini文件,修改为: [client] port=3306 [mysql] default-character-set=utf8 # The