广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php中使用substr截取字符串乱码的解决方法
  • 115
分享到

php中使用substr截取字符串乱码的解决方法

2023-06-14 05:06:17 115人浏览 泡泡鱼
摘要

这篇文章主要介绍PHP中使用substr截取字符串乱码的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php substr截取字符串乱码的解决办法:1、使用mbstring扩展库的“mb_substr

这篇文章主要介绍PHP中使用substr截取字符串乱码的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

php substr截取字符串乱码的解决办法:1、使用mbstring扩展库的“mb_substr()”截取;2、使用ecshop里面的截取UTF-8编码下字符串的函数。

在PHP程序开发中,经常会执行字符串的截取操作,比如输出信息列表时,标题不宜过长,打印文章摘要时,也要执行一系列的字符串截取操作。遇到这些需求时,我们经常会想到使用substr()方法来实现,substr()对全英文字符串的截取是比较适合的。

但字符串只要出现中文字符,就有可能导致PHP substr中文乱码,因为中文UTF-8编码,每个汉字占3字节,而GB2312占2字节,英文占1字节,截取位数不准确,substr()硬生生地将一个中文字符“锯”成两半,造成断开的字符会把其后的..拉过来一起做一个字,所以出现了PHP substr中文乱码。

substr --- 取得部份字符串

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

说明 :

substr( )传回 string的一部份字符串,由参数 start和 length指定。

如果 start是正数,传回的字符串将会从 string的第 start个字元开始。

Example :

<?php$rest = substr ("abcdef", 1); // returns "bcdef"$rest = substr ("abcdef", 1, 3); // returns "bcd"?>

如果 start是负数,传回的字符串将会从 string结尾的第 start个字开始。

Example :

<?php$rest = substr ("abcdef", -1); // returns "f"$rest = substr ("abcdef", -2); // returns "ef"$rest = substr ("abcdef", -3, 1); // returns "d"?>

如果有给予参数 length而且是正数时,传回的字符串将会从 start传回 length个字元。
如果有给予参数 length而且是负数时,传回的字符串将会结束于 string结尾的第 length个字元。

Example :

<?php$rest = substr ("abcdef", 1, -1); // returns "bcde"?>

对于英文没有问题,我们测试一个中文

<?php$rest = substr ("中国人", 1, -1); // returns "fdsafsda" 就是乱码了?>

这种截取字符的结果,肯定不是我们想要的结果,这种出现PHP substr中文乱码的情况,可能会导致程序无法正常运行。解决办法主要有两种:

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

可以用mb_substr()/mb_strcut()这个函数,mb_substr()/mb_strcut()的用法与substr()相似,只是在mb_substr()/mb_strcut最后要加入多一个参数,以设定字符串的编码,但是一般的服务器都没打开php_mbstring.dll,需要在php.ini在把php_mbstring.dll打开。

<?php  echo mb_substr("php中文字符encode",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 就显得不那么好用了。例如我要显示一个小图片的简要信息,5 个中文正好,超过 5 个就截取前4再加上 ”…”,这样处理中文是没问题了,可是处理英文或数字,这样截取就太短了。

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

function sub_str($str, $length = , $append = true){  $str = trim($str);  $strlength = strlen($str);  if ($length == || $length >= $strlength)  {    return $str; //截取长度等于或大于等于本字符串的长度,返回字符串本身  }  elseif ($length < ) //如果截取长度为负数  {    $length = $strlength + $length;//那么截取长度就等于字符串长度减去截取长度    if ($length < )    {      $length = $strlength;//如果截取长度的绝对值大于字符串本身长度,则截取长度取字符串本身的长度    }  }  if (function_exists('mb_substr'))  {    $newstr = mb_substr($str, , $length, EC_CHARSET);  }  elseif (function_exists('iconv_substr'))  {    $newstr = iconv_substr($str, , $length, EC_CHARSET);  }  else  {    //$newstr = trim_right(substr($str, , $length));    $newstr = substr($str, , $length);  }  if ($append && $str != $newstr)  {    $newstr .= '...';  }  return $newstr;}

以上是“php中使用substr截取字符串乱码的解决方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网PHP编程频道!

--结束END--

本文标题: php中使用substr截取字符串乱码的解决方法

本文链接: https://www.lsjlt.com/news/268314.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php中使用substr截取字符串乱码的解决方法
    这篇文章主要介绍php中使用substr截取字符串乱码的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php substr截取字符串乱码的解决办法:1、使用mbstring扩展库的“mb_substr...
    99+
    2023-06-14
  • 详解JS截取字符串的三个方法substring,substr,slice
    目录相同点不同点substring语法参数说明substr语法参数说明slice语法参数说明总结一下js中有三个截取字符的方法,分别是substring()、subst&#...
    99+
    2022-11-13
  • 如何解决php截取中文字符串乱码问题
    这篇文章主要介绍“如何解决php截取中文字符串乱码问题”,在日常操作中,相信很多人在如何解决php截取中文字符串乱码问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何解决php截取中文字符串乱码问题”的疑...
    99+
    2023-06-20
  • MySQL 中的字段截取与字符串截取方法详解
    系列文章目录 文章目录 系列文章目录前言一、字段截取:二、字符串截取:总结 前言 在 MySQL 数据库中,有时我们需要截取字段或字符串的一部分进行查询、展示或处理。本文将介绍 MySQL 中常用的字段截取和字符串截取方法,...
    99+
    2023-08-17
    mysql 数据库
  • php字符串的截取和查找,strstr、strpos、substr三个函数的用法
    1、strstr 解释:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。 $email = '1235698556@qq....
    99+
    2023-09-02
    php 开发语言
  • php中字符串截取的方法是什么
    这篇文章给大家分享的是有关php中字符串截取的方法是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法:1、用“substr(字符串,开始位置,截取长度)”语句;2、用“mb_substr...
    99+
    2023-06-15
  • php截取中文字符串的问题怎么解决
    本篇内容主要讲解“php截取中文字符串的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php截取中文字符串的问题怎么解决”吧!PHP是一款广泛使用的编程语言,在开发网站与应用程序上有...
    99+
    2023-07-05
  • JavaScript中如何使用截取字符串的split() 方法
    小编给大家分享一下JavaScript中如何使用截取字符串的split() 方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript是什么JavaS...
    99+
    2023-06-14
  • php中汉字乱码的解决方法
    这篇文章主要介绍了php中汉字乱码的解决方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php中汉字乱码的解决办法:1、通过“header("content-ty...
    99+
    2023-06-06
  • 使用php分割字符串时出现乱码如何解决
    今天就跟大家聊聊有关使用php分割字符串时出现乱码如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。php分割字符串乱码的解决办法:1、通过使用mbstring扩展库的“mb_s...
    99+
    2023-06-14
  • 了解PHP中的substr()函数用于截取字符串
    了解PHP中的substr()函数用于截取字符串在PHP语言中,substr()函数是一个非常有用的字符串处理函数,它可以用于截取指定位置和长度的字符串片段。substr()函数接受三个参数:待截取的字符串、截...
    99+
    2023-11-18
    PHP 字符串 substr
  • 解决Java中文乱码问题:使用System.out.println输出中文字符串
    解决Java中文乱码问题:使用System.out.println输出中文字符串 在Java编程中,当我们想要在控制台输出中文字符串时,有时会遇到乱码的问题。本文将介绍如何解决这个问题,并提供相应的源...
    99+
    2023-10-25
    java python 开发语言 Java
  • php中文文字水印乱码的解决方法
    小编给大家分享一下php中文文字水印乱码的解决方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!php中文文字水印乱码的解决办法:1、去除“--enable-gd-jis-conv”选项,重新编译php;2、通过“mb_c...
    99+
    2023-06-09
  • C# 从 UTF-8 流中读取字符串的正确方法及代码详解
     我们下面的代码是从一个流 stream 中读取 UTF-8 编码的字符串。我们可以先考虑一下其中存在的潜在问题。 string ReadString(Stream stream...
    99+
    2022-11-12
  • 彻底解决MySQL使用中文乱码的方法
    目录1、中文乱码1.1、中文乱码1.2、查看表字符编码1.3、数据库与操作系统编码2、mysql设置变量的范围2.1、session范围2.2、global范围2.3、设置数据全局范...
    99+
    2022-11-13
  • word中使用visio图片中文字出现方格乱码的解决办法
    出现方格乱码的情况通常是因为Visio中所使用的字体与计算机中所安装的字体不兼容或缺失导致的。有几种解决办法可以尝试:1. 检查字体...
    99+
    2023-09-16
    Word
  • Java web应用中的常见字符编码问题的解决方法
    这篇文章给大家介绍Java web应用中的常见字符编码问题的解决方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。以下是 Java web应用的常见编码问题1. html页面的编码在web应用中,通常浏览器会根据htt...
    99+
    2023-06-17
  • SecureCRT出现中文乱码怎么办?win10系统使用SecureCRT出现中文乱码的解决方法
    很多用户在Windows10系统电脑中使用SecureCRT时,都会遇到中文乱码的情况,这是怎么回事呢?我们要如何操作呢?接下来,小编就为大家详细介绍win10下使用SecureCRT出现中文乱码的解决方法吧! 具体如下...
    99+
    2023-05-22
    win10系统中文乱码 securecrt 中文乱码
  • Win8.1中文版系统使用中文软件出现乱码的解决方法
      故障现象   Windows 8.1中文版系统使用中文软件出现乱码:   解决方案   1. 打开我的电脑,在地址栏中输入“ControlPanel”回车;   2. 在搜索框输入&ldqu...
    99+
    2023-06-06
    Win8.1 中文软件 乱码 中文 软件 系统 解决
  • spring boot使用i18n时properties文件中文乱码问题的解决方法
    国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版...
    99+
    2023-05-30
    spring boot i18n
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作