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实现MVC开发得最简单的方法――模型
Apr 10 PHP
PHP学习笔记之三 数据库基本操作
Jan 17 PHP
php设计模式 Strategy(策略模式)
Jun 26 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
PHP与Java进行通信的实现方法
Oct 21 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
php将字符串转化成date存入数据库的两种方式
Apr 28 PHP
6个超实用的PHP代码片段
Aug 10 PHP
php pthreads多线程的安装与使用
Jan 19 PHP
PHP+MySQL存储数据常见中文乱码问题小结
Jun 13 PHP
PHP关于foreach复制知识点总结
Jan 28 PHP
Laravel统计一段时间间隔的数据方法
Oct 09 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
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
PHP中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
jQuery插件 tabBox实现代码
2010/02/09 Javascript
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
详解JavaScript 中的 replace 方法
2016/01/01 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
Python中用altzone()方法处理时区的教程
2015/05/22 Python
Python函数式编程指南(四):生成器详解
2015/06/24 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
python将unicode转为str的方法
2017/06/21 Python
python爬取哈尔滨天气信息
2018/07/14 Python
python实现UDP协议下的文件传输
2020/03/20 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
关于python中导入文件到list的问题
2020/10/31 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
银行见习期自我鉴定
2014/01/29 职场文书
物理专业本科生自荐信
2014/01/30 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
JS数组去重详情
2021/11/07 Javascript
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
MySQL数据管理操作示例讲解
2022/12/24 MySQL