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制作静态网站的模板框架(一)
Oct 09 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
PHP 日,周,月点击排行统计
Jan 11 PHP
PHP使用正则表达式清除超链接文本
Nov 12 PHP
destoon公司主页模板风格的添加方法
Jun 20 PHP
PHP开发Apache服务器配置
Jul 15 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
Zend Framework入门教程之Zend_Mail用法示例
Dec 08 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
Laravel学习教程之IOC容器的介绍与用例
Aug 15 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的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
Jquery带搜索框的下拉菜单
2013/05/06 Javascript
javascript date格式化示例
2013/09/25 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
JS常见构造模式实例对比分析
2018/08/27 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
Python中的ConfigParser模块使用详解
2015/05/04 Python
Python读取Excel的方法实例分析
2015/07/11 Python
python动态网页批量爬取
2016/02/14 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
Python登录注册验证功能实现
2018/06/18 Python
python pytest进阶之fixture详解
2019/06/27 Python
用 Python 制作地球仪的方法
2020/04/24 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
出生证明公证书
2014/04/09 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
课外活动总结
2015/02/04 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
快速学习Oracle触发器和游标
2021/06/30 Oracle
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL