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面向对象分析设计的经验原则
Sep 20 PHP
PHP 数组教程 定义数组
Oct 23 PHP
PHPMyadmin 配置文件详解(配置)
Dec 03 PHP
学习php笔记 字符串处理
Oct 19 PHP
PHP 强制下载文件代码
Oct 24 PHP
PHP UTF8中文字符截断函数代码
Sep 11 PHP
解析PHP汉字转换拼音的类
Jun 18 PHP
php以post形式发送xml的方法
Nov 04 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
PHP实现数组array转换成xml的方法
Jul 19 PHP
PHP利用百度ai实现文本和图片审核
May 08 PHP
Yii框架操作cookie与session的方法实例详解
Sep 04 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
Cakephp 执行主要流程
2010/03/24 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
WAF的正确bypass
2017/01/05 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
搭建vue开发环境
2018/07/19 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
2020/07/24 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
Python内置模块hashlib、hmac与uuid用法分析
2018/02/12 Python
python+opencv识别图片中的圆形
2020/03/25 Python
提升Python程序性能的7个习惯
2019/04/14 Python
Python中@property的理解和使用示例
2019/06/11 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
亿企通软件测试面试题
2012/04/10 面试题
教师自我评价范文
2013/12/16 职场文书
预备党员入党思想汇报
2014/01/04 职场文书
效能监察建议书
2014/05/19 职场文书
房产分割协议书范文
2014/11/21 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
关于做家务的心得体会
2016/01/23 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js