PHP中将一个字符串部分字符用星号*替代隐藏的实现代码


Posted in PHP onSeptember 08, 2019

有时候我们在开发中会遇到这样一种情况,例如:显示手机号我们需要将中间4位遮挡掉,一般使用“*”号代替,或是显示身份证号码是为了保护个人信息也同样需要遮挡掉4位,故可用到下列方式、代码进行实现:

核心代码

<?php 
 
/**
 +----------------------------------------------------------
 * 将一个字符串部分字符用*替代隐藏
 +----------------------------------------------------------
 * @param string $string 待转换的字符串
 * @param int  $bengin 起始位置,从0开始计数,当$type=4时,表示左侧保留长度
 * @param int  $len  需要转换成*的字符个数,当$type=4时,表示右侧保留长度
 * @param int  $type  转换类型:0,从左向右隐藏;1,从右向左隐藏;2,从指定字符位置分割前由右向左隐藏;3,从指定字符位置分割后由左向右隐藏;4,保留首末指定字符串
 * @param string $glue  分割符
 +----------------------------------------------------------
 * @return string 处理后的字符串
 +----------------------------------------------------------
 */
function hideStr($string, $bengin = 0, $len = 4, $type = 0, $glue = "@") {
	if (empty($string))
		return false;
	$array = array();
	if ($type == 0 || $type == 1 || $type == 4) {
		$strlen = $length = mb_strlen($string);
		while ($strlen) {
			$array[] = mb_substr($string, 0, 1, "utf8");
			$string = mb_substr($string, 1, $strlen, "utf8");
			$strlen = mb_strlen($string);
		}
	}
	if ($type == 0) {
		for ($i = $bengin; $i < ($bengin + $len); $i++) {
			if (isset($array[$i]))
				$array[$i] = "*";
		}
		$string = implode("", $array);
	} else if ($type == 1) {
		$array = array_reverse($array);
		for ($i = $bengin; $i < ($bengin + $len); $i++) {
			if (isset($array[$i]))
				$array[$i] = "*";
		}
		$string = implode("", array_reverse($array));
	} else if ($type == 2) {
		$array = explode($glue, $string);
		$array[0] = hideStr($array[0], $bengin, $len, 1);
		$string = implode($glue, $array);
	} else if ($type == 3) {
		$array = explode($glue, $string);
		$array[1] = hideStr($array[1], $bengin, $len, 0);
		$string = implode($glue, $array);
	} else if ($type == 4) {
		$left = $bengin;
		$right = $len;
		$tem = array();
		for ($i = 0; $i < ($length - $right); $i++) {
			if (isset($array[$i]))
				$tem[] = $i >= $left ? "*" : $array[$i];
		}
		$array = array_chunk(array_reverse($array), $right);
		$array = array_reverse($array[0]);
		for ($i = 0; $i < $right; $i++) {
			$tem[] = $array[$i];
		}
		$string = implode("", $tem);
	}
	return $string;
}
 
 
$str = '12345678901';
echo hideStr($str,2,4);

有时候需要考虑中文的替换那么可以参考下面的实现方法

对于字符串某部分使用*号替换的问题:

1.实例:

$username = "linshouyue"; 
echo substr_replace($username,'****','3','4'); 

substr_replace()函数  

1.1)第一参数为需处理的字符串
1.2)第二参数为使用的替换符号
1.3)第三/四参数为需要替换的字符串位置(从第三个字符开始替换后四位字符)

但是该函数对于英文字符/数字数没有任何问题得,但是一旦遇到汉字就会出现很尴尬的问题,因为汉字与英文字符的字节是不一样的,可以使用一下方法解决:

/**     * *替换中文汉字

     * @author 月月

     */
    function substr_cut($user_name){
        $strlen     = mb_strlen($user_name, 'utf-8');
        $firstStr     = mb_substr($user_name, 0, 1, 'utf-8');
        $lastStr     = mb_substr($user_name, -1, 1, 'utf-8');
        return $strlen == 2 ? $firstStr . str_repeat('*', mb_strlen($user_name, 'utf-8') - 1) : $firstStr . str_repeat("*", $strlen - 2) . $lastStr;
    }

好了,这篇文章就介绍到这了

PHP 相关文章推荐
用文本作数据处理
Oct 09 PHP
不用数据库的多用户文件自由上传投票系统(3)
Oct 09 PHP
php 静态变量的初始化
Nov 15 PHP
Search File Contents PHP 搜索目录文本内容的代码
Feb 21 PHP
PHP如何解决网站大流量与高并发的问题
Jun 25 PHP
php cookie名使用点号(句号)会被转换
Oct 23 PHP
php中通过DirectoryIterator删除整个目录的方法
Mar 13 PHP
详解PHP实现异步调用的4种方法
Mar 14 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 PHP
PHP模糊查询技术实例分析【附源码下载】
Mar 07 PHP
php快速导入大量数据的实例方法
Sep 23 PHP
php写app用的框架整理
Sep 29 PHP
Yii框架连表查询操作示例
Sep 06 #PHP
Laravel框架中缓存的使用方法分析
Sep 06 #PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 #PHP
浅析PHP7 的垃圾回收机制
Sep 06 #PHP
PHP的介绍以及优势详细分析
Sep 05 #PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 #PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 #PHP
You might like
转PHP手册及PHP编程标准
2006/12/17 PHP
PHP下判断网址是否有效的代码
2011/10/08 PHP
php多文件上传实现代码
2014/02/20 PHP
php显示时间常用方法小结
2015/06/05 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
也说JavaScript中String类的replace函数
2011/09/22 Javascript
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
JS原型链怎么理解
2016/06/27 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
vue-music关于Player播放器组件详解
2017/11/28 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
详解Python中的strftime()方法的使用
2015/05/22 Python
python导入时小括号大作用
2017/01/10 Python
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
办公室年终个人自我评价
2013/10/28 职场文书
法学专业本科生自荐信范文
2013/12/17 职场文书
个人查摆剖析材料
2014/02/04 职场文书
幼儿学前班评语
2014/12/29 职场文书
公务员个人年终总结
2015/02/12 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis