<?php
/**
* 将一个字符串部分字符用re替代隐藏
* @param stringstring 待处理的字符串
* @param int start 规定在字符串的何处开始,
* 正数 - 在字符串的指定位置开始
* 负数 - 在从字符串结尾的指定位置开始
* 0 - 在字符串中的第一个字符处开始
* @param intlength 可选。规定要隐藏的字符串长度。默认是直到字符串的结尾。
* 正数 - 从 start 参数所在的位置隐藏
* 负数 - 从字符串末端隐藏
* @param string re 替代符
* @return string 处理后的字符串
*/
function hidestr(string, start = 0,length = 0, re = '*') {
if (empty(string)) return false;
strarr = array();mb_strlen = mb_strlen(string);
while (mb_strlen) {
strarr[] = mb_substr(string, 0, 1, 'utf8');
string = mb_substr(string, 1, mb_strlen, 'utf8');mb_strlen = mb_strlen(string);
}strlen = count(strarr);begin = start >= 0 ?start : (strlen - abs(start));
end =last = strlen - 1;
if (length > 0) {
end =begin + length - 1;
} elseif (length < 0) {
end -= abs(length);
}
for (i=begin; i<=end; i++) {strarr[i] =re;
}
if (begin >=end || begin >=last || end>last) return false;
return implode('', $strarr);
}
测试:
//隐藏手机号中间4位
hidestr('18600005940', 3, 4); //186****5940
//只保留姓名里的最后一个字,常见与ATM,网银等
hidestr('云厉', 0, -1); //*厉
//隐藏邮箱部分内容,常见网站帐号,如支付宝等
list(name,domain) = explode('@', '979137@qq.com');
hidestr(name, 1, -1) . '@' . hidestr(domain, 0, 2); // 9****7@**.com
此函数用法和PHP系统函数函数substr原理和用法是一样的。只不过substr是用于截取你想要的字符串,而hidestr是隐藏你想要的字符串,用*号代替