我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

php中使用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截取字符串乱码的解决方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

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

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

如何解决php截取中文字符串乱码问题

这篇文章主要介绍“如何解决php截取中文字符串乱码问题”,在日常操作中,相信很多人在如何解决php截取中文字符串乱码问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何解决php截取中文字符串乱码问题”的疑
2023-06-20

MySQL 中的字段截取与字符串截取方法详解

系列文章目录 文章目录 系列文章目录前言一、字段截取:二、字符串截取:总结 前言 在 MySQL 数据库中,有时我们需要截取字段或字符串的一部分进行查询、展示或处理。本文将介绍 MySQL 中常用的字段截取和字符串截取方法,
2023-08-17

php中字符串截取的方法是什么

这篇文章给大家分享的是有关php中字符串截取的方法是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法:1、用“substr(字符串,开始位置,截取长度)”语句;2、用“mb_substr(字符串,开始位置,
2023-06-15

JavaScript中如何使用截取字符串的split() 方法

小编给大家分享一下JavaScript中如何使用截取字符串的split() 方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript是什么JavaS
2023-06-14

php截取中文字符串的问题怎么解决

本篇内容主要讲解“php截取中文字符串的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php截取中文字符串的问题怎么解决”吧!PHP是一款广泛使用的编程语言,在开发网站与应用程序上有
2023-07-05

解决PHP中16进制转字符串出现中文乱码的方法

解决PHP中16进制转字符串出现中文乱码的方法在PHP编程中,有时候我们会遇到需要将16进制表示的字符串转换为正常的中文字符的情况。然而,在进行这个转换的过程中,有时会遇到中文乱码的问题。这篇文章将为您提供解决PHP中16进制转字符串出现
解决PHP中16进制转字符串出现中文乱码的方法
2024-03-04

php中汉字乱码的解决方法

这篇文章主要介绍了php中汉字乱码的解决方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php中汉字乱码的解决办法:1、通过“header("content-type:te
2023-06-06

使用php分割字符串时出现乱码如何解决

今天就跟大家聊聊有关使用php分割字符串时出现乱码如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。php分割字符串乱码的解决办法:1、通过使用mbstring扩展库的“mb_s
2023-06-14

了解PHP中的substr()函数用于截取字符串

了解PHP中的substr()函数用于截取字符串在PHP语言中,substr()函数是一个非常有用的字符串处理函数,它可以用于截取指定位置和长度的字符串片段。substr()函数接受三个参数:待截取的字符串、截取的起始位置和截取的长度。下面
了解PHP中的substr()函数用于截取字符串
2023-11-18

php中文文字水印乱码的解决方法

小编给大家分享一下php中文文字水印乱码的解决方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!php中文文字水印乱码的解决办法:1、去除“--enable-gd-jis-conv”选项,重新编译php;2、通过“mb_c
2023-06-09

PHP开发中遇到的16进制转字符串中文乱码问题及解决方案

PHP开发中遇到的16进制转字符串中文乱码问题及解决方案在PHP开发中,有时候我们会遇到需要将16进制形式的数据转换为字符串的需求,但在这个过程中可能会出现中文乱码的问题。本文将介绍具体的问题分析和解决方案,并附上代码示例,希望能帮助到有
PHP开发中遇到的16进制转字符串中文乱码问题及解决方案
2024-03-05

使用 AES-GSM 方法解密在 GO 中编码的 C# 字符串

php小编西瓜为您介绍一种在GO语言中解密C#字符串的方法——AES-GSM。AES-GSM是一种高级加密标准,它结合了AES(高级加密标准)和GSM(全球系统移动通信)的优势。通过使用AES-GSM方法,我们可以有效地解密在GO中编码的C
使用 AES-GSM 方法解密在 GO 中编码的 C# 字符串
2024-02-10

使用MySQL从JSON字符串提取数据的方法详解

目录1. 背景知识2. 示例数据3. SQL 查询分析3.1 查询结构解析4. 查询结果5. 性能考虑6. 总结1. 背景知识jsON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时
使用MySQL从JSON字符串提取数据的方法详解
2024-10-22

word中使用visio图片中文字出现方格乱码的解决办法

出现方格乱码的情况通常是因为Visio中所使用的字体与计算机中所安装的字体不兼容或缺失导致的。有几种解决办法可以尝试:1. 检查字体兼容性:首先确保Visio中使用的字体在计算机中是正确安装的。在Visio中选中方格乱码的文本,然后在“开始
2023-09-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录