首页 > 后端开发 > 正文

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

2024-07-20 06:29:02 | 我爱编程网

今天我爱编程网小编为大家带来了PHP中使用substr截取字符串出现中文乱码问题该怎么办,希望能帮助到大家,一起来看看吧!

本文目录一览:

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

php字符串的截取

1楼的代码有点问题 截取中文会出现问题 比如刚好是9个字母1个汉字 你截取10位的话 就会出现乱码 所以截取含中文字符串时要用mb_substr代替substr

for($i=0;$i<strlen($str);$i=$i+10){
$string=mb_substr($str,$i,10);
echo $string."<br>";
}

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

php 获取字符串某字符的位置!

有以下几种方法:

stripos() 返回字符串在另一字符串中第一次出现的位置(大小写不敏感)

stristr() 查找字符串在另一字符串中第一次出现的位置(大小写不敏感)

strpos() 返回字符串在另一字符串中首次出现的位置(对大小写敏感)

strrchr() 查找字符串在另一个字符串中最后一次出现的位置。

strripos() 查找字符串在另一字符串中最后出现的位置(对大小写不敏感)

strrpos() 查找字符串在另一字符串中最后出现的位置(对大小写敏感)

扩展资料:

PHP常用函数:

strtoupper()函数把字符串转换为大写

strtolower()函数把字符串转换为小写

strtok()函数把字符串分割为更小的字符串

strstr()函数搜索一个字符串在另一个字符串中的第一次出现

strspn()函数返回在字符串中包含的特定字符的数目

strrpos()函数查找字符串在另一个字符串中最后一次出现的位置

strripos()函数查找字符串在另一个字符串中最后一次出现的位置

参考资料来源: 百度百科-PHP (超文本预处理器)

PHP中使用substr截取字符串出现中文乱码问题该怎么办我爱编程网

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

我爱编程网(https://www.52biancheng.com)小编还为大家带来PHP中使用substr截取字符串出现中文乱码问题该怎么办的相关内容。

在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截取字符串出现中文乱码问题该怎么办相关内容,想要了解更多信息,敬请查阅我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“PHP中使用substr截取字符串出现中文乱码问题该怎么办”相关推荐
如何利用PHP来截取一段中文字符串而不出现乱码
如何利用PHP来截取一段中文字符串而不出现乱码

如何利用PHP来截取一段中文字符串而不出现乱码/*功能:截取全角和半角混合的字符串以避免乱码参数: $str_cut 需要截断的字符串 $length  允许字符串显示的最大长度*/function substr_cut($str_cut,$length = 30){  if (strlen($str_cut) &gt;; $length){  for($i=0; $i &lt; $leng

2024-07-13 12:16:29
python命令行输入中文乱码怎么办
python命令行输入中文乱码怎么办

python命令行输入中文乱码怎么办python2.X,代码中指定了UTF-8,但是在cmd命令行窗口时,打印的中文仍然会乱码。在python3不存在该问题运行结果:原因中文windows默认的输出编码为gbk,与脚本中定义的UTF-8不一样,所以出现了解码失败的情况。相关推荐:《Python基础教程》解决方法有如下两种方法可以解决这个问题

2024-02-28 14:03:03
Python中字符串常用操作有哪些
Python中字符串常用操作有哪些

Python中字符串常用操作有哪些字符串是Python中常用的数据类型,我们可以使用引号('或")来创建字符串,对字符串进行使用和操作,需要用到特定的函数,以下是常用的Python字符串操作方法:1.capitalize()作用:capitalize()主要是用来实现字符串首字母大写,其他字母小写的功能。实例:12str1="oldboy"print(str1.c

2024-03-04 22:06:59
eclipseJava中文输出乱码是什么原因?
eclipseJava中文输出乱码是什么原因?

eclipseJava中文输出乱码是什么原因?eclipseJava中文输出乱码的原因可能是字符编码与默认的编码不符合导致的。可以尝试以下方法解决:1.修改Eclipse编码设置:点击Eclipse菜单栏的"Window",选择"Preferences";在弹出的窗口中,找到"General"-&gt;"Workspace";在右侧的"Textfileencoding"选项中选择合

2024-04-14 03:47:49
在java中怎么把一个字符串编译为指定编码格式(如:unicode)的输出
在java中怎么把一个字符串编译为指定编码格式(如:unicode)的输出

在java中怎么把一个字符串编译为指定编码格式(如:unicode)的输出很多种方法request.setCharacterEncoding("utf-8");//设置输入编码格式response.setContentType("text/html;charset=utf-8");//设置输出编码格式一般写个Servlet的过滤器(getByte("ISO-8859-1"),"u

2024-06-10 22:53:11
java编程中使用UEStudio总是出现“'java' 不是内部或外部命令”是什么问题?
java编程中使用UEStudio总是出现“'java' 不是内部或外部命令”是什么问题?

java高手帮忙UE配置好后能编译但执行不出结果执行后输出Usage:java[-options]class[args...](toex古道上空传来阵阵战马的嘶鸣。最前方依稀看见一位身着盔甲、英姿飒爽的女将军。她正用劲挥舞着马鞭,奔跑在这崎岖的古道上。这位归心似箭的女将军就是远近闻名的花木兰。话说十几年前,木兰家中接到可汗征兵作战的军贴。善良、孝顺的木兰为了不让年迈的父亲承受征战之苦。木兰—

2024-03-28 08:24:15
什么是字符串
什么是字符串

使用PHP编写程序,给定一个三位自然数,然后把这个数的百位数与个位数对调,输出对调后的数?核心知识:使用字符串反转函数;简便高效..&lt;?phpfunction numFun($num){foreach(func_get_args() as $n){echo $n."\t&gt;&gt;&gt;\t".strrev($n)."&lt;br&gt;";}

2024-07-16 11:26:13
PHP怎么把多个数组揉成一个json字符串?
PHP怎么把多个数组揉成一个json字符串?

PHP怎么把多个数组揉成一个json字符串?&lt;?php//创建数组$array=array("name"=&gt;"Hza","age"=&gt;21);//数组转化为json格式echojson_encode($array);echo"&lt;br/&gt;";//创建类classStudent{public$na

2024-07-15 21:20:36