,,PHP中使用substr()截取字符串出现中文乱码问题该怎么办

,,PHP中使用substr()截取字符串出现中文乱码问题该怎么办

本文介绍了使用php substr()拦截字符串时如何处理乱码,其中涉及到php substr()方法的一些知识点。和感兴趣的朋友一起学习吧。

在PHP程序开发中,经常会进行字符串截取。比如输出信息列表时,标题不能太长,打印文章摘要时,也要进行一系列的字符串截取操作。当我们满足这些需求时,往往会想到使用substr()方法,substr()更适合拦截所有英文字符串。

但只要字符串中出现汉字,就可能导致PHP substr的中文乱码。因为中文UTF-8编码,每个汉字占3个字节,而GB2312占2个字节,英文占1个字节,所以截取的位数不准确。Subsr()强行将一个汉字“锯”成两半,导致断开的字符拉动下面的.在一起组成一个单词,所以PHP substr出现中文乱码。

substr --- 取得部份字符串

语法:string substr(字符串string,int start [,int length])

描述:

Substr()返回字符串的一部分,由参数start和length指定。

如果start是正数,则返回的字符串将从字符串的起始字符开始。

Example :

?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

$rest=substr ('abcdef ',1);//返回“bcdef”

$rest=substr ('abcdef ',1,3);//返回“bcd”

如果start为负数,返回的字符串将以字符串末尾的起始单词开始。

Example :

?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

$rest=substr ('abcdef ',-1);//返回“f”

$rest=substr ('abcdef ',-2);//返回“ef”

$rest=substr ('abcdef ',-3,1);//返回“d”

如果给定了参数length并且它是正数,则返回的字符串将从开始处返回长度字符。

如果给定了参数length,并且它是负数,则返回的字符串将在字符串末尾的长度字符处结束。

Example :

?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

$rest=substr ('abcdef ',1,-1);//返回“bcde”

英语没有问题。让我们测试一个中国人。

?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

$rest=substr('中国人',1,-1);//返回“fdsafsda”是乱码

这样截取人物的结果肯定不是我们想要的。这种中文乱码的PHP substr可能会导致程序无法正常运行。有两种主要的解决方案:

一、使用mbstring扩展库的mb_substr()截取就不会出现乱码了。

可以使用函数mb_substr()/mb_strcut()。mb_substr()/mb_strcut()的用法和substr()类似,只是在mb_substr()/mb_strcut的末尾多加了一个参数来设置字符串的编码,但是一般的服务器不会打开PHP _ mbstring.

?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

Mb _ substr ('PHP汉字编码',0,4,' utf-8 ');

如果最后一个编码参数没有指定,三个字节就是一个中文,这是utf-8编码的特点。如果加上utf-8字符集描述,会被一个字截取。

使用时注意php文件的编码和网页的编码。使用这个mb_substr方法时,需要预先知道字符串的编码。如果不知道编码,就需要判断了。mbstring库也提供了mb_check_encoding来检查字符串的编码,但是并不完善。

PHP自带了几个字符串拦截函数,其中比较常用的是substr和mb_substr。当前者处理中文时,GBK是2个长度单位,UTF是3个长度单位。当后者指定编码时,中文是1个长度单位。

Substr有时候会截1/3中文或者半中文,会显示乱码。相对来说,mb_substr更适合我们使用。但是有时候mb_substr就没那么好用了。比如我要显示一个小图片的简要信息,五个汉字正好。如果超过五个字符,截取前四个字符并添加“…”。处理中文没问题,处理英文或者数字太短了。

二、自己书写截取函数,但效率不如用mbstring扩展库来得高。下面是ecshop里面的截取UTF-8编码下字符串的函数。

函数sub_str($str,$length=,$append=true)

{

$ str=trim($ str);

$ strlength=strlen($ str);

if($ length==| | $ length=$ strlength)

{

返回$ str//截距长度等于或大于此字符串的长度,返回字符串本身。

}

Elseif ($length) //如果截距长度为负

{

$ length=$ strlength $ length//那么截距长度等于字符串长度减去截距长度

if(长度)

{

$ length=$ strlength//如果截距长度的绝对值大于字符串本身的长度,则截距长度取字符串本身的长度。

}

}

if (function_exists('mb_substr '))

{

$newstr=mb_substr($str,$length,EC _ CHARSET);

}

else if(function _ exists(' iconv _ substr '))

{

$newstr=iconv_substr($str,$length,EC _ CHARSET);

}

其他

{

//$ newstr=trim _ right(substr($ str,$ length));

$newstr=substr($str,$ length);

}

if ($append $str!=$newstr)

{

$newstr。='.';

}

return $ newstr

}

好了,这篇文章就到这里。相信会给你带来一些东西。上面的代码也很简单。有不明白的地方请给我留言,我会尽快给你答复。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • 七种php开发环境搭建工具有哪些,七种php开发环境搭建工具包括
  • 七种php开发环境搭建工具有哪些,七种php开发环境搭建工具包括,七种PHP开发环境搭建工具
  • php高并发三种解决方法,php 高并发解决方案
  • php高并发三种解决方法,php 高并发解决方案,PHP解决高并发问题(opcache)
  • php邮件发送的两种方式区别,php邮件发送的两种方式是什么
  • php邮件发送的两种方式区别,php邮件发送的两种方式是什么,php邮件发送的两种方式
  • php跳转页面的几种实现方法详解图,php跳转页面的几种实现方法详解视频
  • php跳转页面的几种实现方法详解图,php跳转页面的几种实现方法详解视频,PHP跳转页面的几种实现方法详解
  • PHP购物车,php立即购买和购物车功能
  • PHP购物车,php立即购买和购物车功能,php实现购物车功能(上)
  • php读取pdf数据,php pdf读取
  • php读取pdf数据,php pdf读取,PHP中使用mpdf 导出PDF文件的实现方法
  • php网站判断用户是否是手机访问的方法有哪些,php如何判断用户是否登录
  • 留言与评论(共有 条评论)
       
    验证码: