首页 > 编程语言 >php substr中文乱码最有效到解决办法

php substr中文乱码最有效到解决办法

时间:2023-05-15 13:32:42浏览次数:35  
标签:字符 string mb 截取 乱码 substr str php




直接使用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半。解决办法:
1、使用mbstring扩展库的mb_substr截取就不会出现乱码了。
2、自己书写截取函数,但效率不如用mbstring扩展库来得高。
3、如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0)。
=============================
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('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');

?>

输出:这样一来我的字

<?php

echo mb_strcut('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');

?>


输出:这样一
从上面的例子可以看出,mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。
=============================
PHP实现中文字串截取无乱码的方法

function GBsubstr($string, $start, $length) {

if(strlen($string)>$length){

 $str=null;

 $len=$start+$length;

 for($i=$start;$i<$len;$i++){

 if(ord(substr($string,$i,1))>0xa0){

 $str.=substr($string,$i,2);

 $i++;

 }else{

 $str.=substr($string,$i,1);

 }

 }

 return $str.'...';

}else{

 return $string;

}

}

标签:字符,string,mb,截取,乱码,substr,str,php
From: https://blog.51cto.com/u_3871599/6277951

相关文章

  • buuctf [网鼎杯 2020 朱雀组]phpweb
    首先访问网站,发现警告,说的是后端时区设置不对,这引导我们看看index源码是怎么查询时间的Warning:date():Itisnotsafetorelyonthesystem'stimezonesettings.Youarerequiredtousethedate.timezonesettingorthedate_default_timezone_set()function.Incase......
  • PHP命名空间(Namespace)初探
    探完闭包[查看],再探命名空间。对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结。命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定......
  • PHP常用设计模式
    单例模式特点:三私一公:私有的静态变量(存放实例),私有的构造方法(防止创建实例),私有的克隆方法(防止克隆对象),公有的静态方法(对外界提供实例) 应用场景:程序应用中,涉及到数据库操作时,如果每次操作的时候连接数据库,会带来大量的资源消耗。可以通过单例模式,创建唯一的数据库连接对象......
  • php ::是啥意思
    php中::是什么意思? PHP中的‘::’是一种内置的语法解析符号,中文名叫做“范围解析操作符”。::符号是用来帮助PHP中的语法结构“类”来实现对其成员的访问,通常我们只允许访问静态成员,具体代码如下:①类正常访问静态成员classHeima{//静态属性publicstatic$heima='......
  • 解决vscode控制台中文乱码问题
    一、问题概述操作系统使用的windows11,语言是英文版;使用visualstudiocode的terminal编译程序,输出的中文是乱码;二、visualstudiocode的terminalvisualsutdiocode中的terminal可以集成cmd.exe或者powershell等;我这里选择的是cmd.exe,既然输出中文乱码,那么肯定跟cmd.exe的编......
  • Prometheus php-fpm监控安装部署
    1.进入默认php配置文件:/etc/php/7.3/fpm/php-fpm.conf添加:pm.status_path=/fpm_statusecho"pm.status_path=/fpm_status">>/etc/php/7.3/fpm/php-fpm.conf2.在nginx配置文件下面添加fpm-statuslocation配置:/etc/nginx/conf.d/nginx-php.conflocation~^/(fpm......
  • 用扩展的方式在 PHP 中使用 Kafka
    前言:    由于之前在PHP中使用Kafka是通过composer包的方式,由于 nmred/kafka-php很久没有维护,并且网上相关问题的文章也比较少。所以我这次换成PHP扩展 RdKafka继续使用,主要介绍扩展安装和这种方式的基本操作。 安装:1.下载2.目录    由于php-rdkafka......
  • 如何在业务代码中使用 ThinkPHP5.1 封装的容器内反射方法
    invokeClass用法:可以不传命名空间实例化(通过反射实例化)$obj=Container::getInstance()->invokeClass(InvokerTest::class);var_dump($obj->invokerNews());die;-----------------------------------------------------------------------invokeMethod用法:传入带命名空间的类和......
  • PHP对接ESP8266
    前言:    众所周知,在APP开发中,C/S是基本的开发结构。客户端负责应用的展示,交互与网络请求,服务端负责数据的传输,处理,存储,输出等等。而物联网除了之前介绍的MQTT实现H5实时控制舵机旋转角度来完成开关外,同样也可以通过HTTP的请求方式来和任何一门语言的服务端进行交互。  ......
  • 正确使用php开发系列:判断数组的key是否存在
    背景:我们习惯上使用!empty($data['data']['list']判断数组$data里有没有key为list的元素,正确判断key是否存在的方式应该使用array_key_exists 为什么不要使用!empty($data['data']['list'],因为当list不存在时,会报错!......