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 相关文章推荐
漂亮但不安全的CTB
Oct 09 PHP
php allow_url_include的应用和解释
Apr 22 PHP
php中将数组存到文件里的实现代码
Jan 19 PHP
php递归函数中使用return的注意事项
Jan 17 PHP
php实现设计模式中的单例模式详解
Oct 11 PHP
php简单实现MVC
Feb 05 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
Jan 16 PHP
PHP新特性之字节码缓存和内置服务器
Aug 11 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
php微信开发之谷歌测距
Jun 14 PHP
Laravel 在views中加载公共页面的实现代码
Oct 22 PHP
TP5框架实现上传多张图片的方法分析
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
关于时间计算的结总
2006/12/06 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
利用函数的惰性载入提高javascript代码执行效率
2014/05/05 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
vuex的使用步骤
2021/01/06 Vue.js
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
应用服务器有那些
2012/01/19 面试题
职业生涯规划怎么写
2013/12/29 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
2016党员党课心得体会
2016/01/07 职场文书
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python