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 相关文章推荐
PHP伪静态写法附代码
Jun 20 PHP
php中设置多级目录session的问题
Aug 08 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
Oct 04 PHP
利用PHP生成静态HTML文档的原理
Oct 29 PHP
使用php验证复选框有效性的示例
Nov 13 PHP
php简单实现快速排序的方法
Apr 04 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
Oct 18 PHP
PHP获取远程http或ftp文件的md5值的方法
Apr 15 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
May 08 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 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将任何格式视频转为flv的代码
2009/09/03 PHP
php获取post中的json数据的实现方法
2011/06/08 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
php获取随机数组列表的方法
2014/11/13 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
2017/02/08 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
给Function做的OOP扩展
2009/05/07 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
2014/12/05 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
在自动化中用python实现键盘操作的方法详解
2019/07/19 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
基于python实现雪花算法过程详解
2019/11/16 Python
python如何查看安装了的模块
2020/06/23 Python
意大利奢侈品网站:Italist
2016/08/23 全球购物
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
使用索引有什么好处
2016/07/27 面试题
高中体育教学反思
2014/01/24 职场文书
团拜会策划方案
2014/06/07 职场文书
素质教育标语
2014/06/27 职场文书
建筑安全责任书范本
2014/07/24 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
PHP实现考试倒计时功能代码
2021/04/16 PHP
Python sklearn分类决策树方法详解
2022/09/23 Python