使用PHP如何去除字符串结尾的字符
前言
在工作中遇到一个需求:一串字符串,如“迅雷官方下载“、“快播5.0下载”,需要去掉他们结尾的“官方下载”和”下载“,等字符。
case
case1: str_replace()
我最先开始想到的是使用str_replace函数。但是会有个问题,这个函数可以过滤掉子字符串,虽然可以限定过滤的次数,但是不能限定过滤结尾的字符串,故pass掉。
case2: mb_strpos + mb_substr() + mb_strlen()
思路是这样的:分别获取过滤字符串长度,”官方下载“就是4个字符,然后使用mb_substr切割结尾的4个。
function filter_word($word){
$filterList = ['官方下载','下载'];
foreach ($filterList as $fitler){
$wordLen = mb_strlen($word,'utf-8');
$filterLen = mb_strlen($fitler,'utf-8');
$offset = $wordLen - $filterLen;
//如果待过滤字符串小于过滤字符串跳过(后期优化加上的)
if ($offset <= 0){
continue;
}
$strPos = mb_strpos($word, $filter, $offset,'utf-8') !== false
? mb_strpos($word, $filter, $offset,'utf-8') : false;
if ($strPos !== false){
$word = mb_substr($word,0,$offset,'utf-8');
}
}
}
注意
- mb_strpos函数的第三个参数,$offset为负值并不是从结尾开始算起!
- 使用mb_*来处理Multibyte String
case3: trim()
case2虽然可以解决本需求,但是觉得很麻烦,就问同事,同事有没有更好的办法。
同事:”可以用trim“
我:(心想'trim是第一个被我pass掉的函数啊。‘)trim中文的话会出现乱码。
同事:举个栗子
我:。。。。。
然后我就去官网仔细读了一遍trim函数,收获颇大。
- 不指定第二个参数,默认过滤 空白字符和\t\n\r\0\x0B
- trim('bacabccba','abc') --> ''
- trim('abcdefg','a..e') --> g
- 过滤数组array_map('trim',$arr)
但是关于trim中文会乱码的原因没找到,通过谷歌终于找到了,里边原理讲得很清楚了,我就不赘述了。
原理中没有说明怎么生成16进制的值,这里做个补充:bin2hex()
此外官网还提示,除了trim,split函数和splice函数也会出现类似问题
case4: preg_replace
在搜寻trim乱码的过程中,发现还可以使用正则替换。当时有可能局限在这个需求,思路一下变的狭隘了。
preg_replace('/下载\$/','',$str);
结论
使用正则替换结尾的字符串是最简单的解决方法。
但是通过case2,自己运用到好多函数以及考虑如何优化来解决一个需求的感觉也是很好的(不知道这算不算算法,哈哈)。
通过这个需求还总结了之前脑子里关于“trim中文乱码”的模糊记忆。
感谢需求!
使用PHP如何去除字符串结尾的字符的更多相关文章
- JavaScript trim 实现(去除字符串首尾指定字符)
String.prototype.trim = function (char, type) { if (char) { if (type == 'left') { return this.replac ...
- JavaScript trim 实现去除字符串首尾指定字符的简单方法
String.prototype.trim = function (char, type) { if (char) { if (type == 'left') { return this.replac ...
- 用Oracle的TRIM函数去除字符串首尾指定字符
去掉首尾空格 SELECT TRIM(' abc '), ltrim(' abc '), rtrim(' abc ') FROM dual; 去掉首尾的其他字符 SELECT /*TRIM(';a;b ...
- javascript 去除字符串中重复字符
/** * 去除字符串中重复的字符,以下提供2种方法, * removeRepeat()为自己所想: * removeRepeat2()参考网上思路补充的 * removeRepeat3()敬请期待· ...
- C#后台去除字符串最后一个字符
string str = "a,b,c,"; int length = str.length; //获取字符串长度 str = str.substring(0,length-1); ...
- c# String.Join 和 Distinct 方法 去除字符串中重复字符
1.在写程序中经常操作字符串,需要去重,以前我的用方式利用List集合和 contains去重复数据代码如下: string test="123,123,32,125,68,9565,432 ...
- String.Join 和 Distinct 方法 去除字符串中重复字符
Qualys项目中写到将ServerIP以“,”分割后插入数据库并将重复的IP去除后发送到服务器进行Scan,于是我写了下面的一段用来剔除重复IP: //CR#1796870 modify by v- ...
- c# 去除字符串中重复字符
String.Join 和 Distinct 方法 https://www.cnblogs.com/louby/p/6224960.html 1.在写程序中经常操作字符串,需要去重,以前我的用方式利用 ...
- 【iOS】去除字符串首尾空格或某字符
在iOS的实际开发中,常会出现需要去除空格的情况,总结有三种情况: 去除字符串首尾连续字符(如空格): 去除字符串首部连续字符(如空格): 去除字符串尾部连续字符(如空格): 去除字符串首尾连续字符( ...
随机推荐
- 【java】记录一下java的常用用法
1.二维数组 public static void main(String[] args) { //定义 int a[][] = {{1,2,3},{4,5,6},{7,8,9}}; int [][] ...
- 2018-8-10-WPF-播放-gif
title author date CreateTime categories WPF 播放 gif lindexi 2018-08-10 19:16:53 +0800 2018-2-13 17:23 ...
- Shell 变量操作
- redis数据操作篇
服务器端 服务器端的命令为redis-server 可以使⽤help查看帮助⽂档 redis-server --help 个人习惯 ps aux | grep redis 查看redis服务器进程su ...
- rest framework之视图组件
一.APIView APIView继承的是和django中CBV模式下的View类.View类中的dispatch方法通过反射对不同的请求方法执行不同的函数.而APIView不仅拥有这个特性,而且重 ...
- linux上安装php phpredis扩展
linux 下安装redis以及php Redis扩展 环境配置: centos6.0 nginx/1.0.0 php/5.3.8 mysql/5.5.17 步骤一.下载redis 可以去http:/ ...
- Windows下生成目录结构树
1.进入需要生成目录结构的文件主目录 2.在当前目录打开命令行 3.输入命令 tree /f > list.txt 4.即在当前目录下生成了list.txt文件
- elementUI表单嵌套时间报错
elementUI表单嵌套日期时间选择时间后报错 <el-form-item label="起始结束时间:" required prop="startime&quo ...
- Http请求工具类 httputil
package com.snowfigure.kits.net; import java.io.BufferedReader; import java.io.IOException; import j ...
- snaker配置
1,导入jar包 jar包 2,snaker的配置 3,snaker的工具类 以上是使用snaker的最基本的配置. http://lightfor.org/snaker/demo.html