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 相关文章推荐
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
destoon公司主页模板风格的添加方法
Jun 20 PHP
PHP中IP地址与整型数字互相转换详解
Aug 20 PHP
PHP5.3安装Zend Guard Loader图文教程
Sep 29 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
Nov 15 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
php PDO判断连接是否可用的实现方法
Apr 03 PHP
php出租房数据管理及搜索页面
May 23 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
Dec 28 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
Dec 07 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 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中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
PHP上传图片类显示缩略图功能
2016/06/30 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
jQuery语法总结和注意事项小结
2012/11/11 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
解决uWSGI的编码问题详解
2017/03/24 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
幼儿园园长自我鉴定
2013/10/22 职场文书
自荐书4要点
2014/01/25 职场文书
环保建议书500字
2014/05/14 职场文书
计生工作先进事迹
2014/08/15 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
Python基础知识之变量的详解
2021/04/14 Python
Redis 常见使用场景
2021/08/30 Redis