这里用到的知识点 ** 字符串的截取替换 ** 和获取** 中文字符串的长度 ** 。你可能会疑问为什么和屏蔽手机号一样直接用substr_replace()处理
上一篇文章介绍了“PHP屏蔽手机号部分位数”的一般做法。今儿再看看PHP如何屏蔽用户名称的部分字符。
应用效果图:
代码实现:
/**
* 名称字符串适用*号做部分隐藏
*/
function replace_str_hide($str){
$resplace_str = array('*', '**', '***', '****', '*****');
o$str_len = mb_strlen($str,'UTF-8');
oswitch (true) {
ocase $str_len <= 2 && $str_len > 1://1-2用1个*号取代
oreturn mb_substr($str, 0, -strlen($resplace_str[0])) . $resplace_str[0];
obreak;
ocase $str_len <= 4 && $str_len > 2://2-4用2个*号取代
oreturn mb_substr($str, 0, -strlen($resplace_str[1])) . $resplace_str[1];
obreak;
ocase $str_len <= 6 && $str_len > 4://4-6用3个*号取代
oreturn mb_substr($str, 0, -strlen($resplace_str[2])) . $resplace_str[2];
obreak;
ocase $str_len <= 8 && $str_len > 6://6-8用4个*号取代
oreturn mb_substr($str, 0, -strlen($resplace_str[3])) . $resplace_str[3];
obreak;
ocase strlen($str) > 8://8以上用5个*号取代
oreturn mb_substr($str, 0, -strlen($resplace_str[4])) . $resplace_str[4];
obreak;
odefault:
oreturn $str;
obreak;
o}
}
echo replace_str_hide('我是你的眼');
//输出的结果:我是***
这里用到的知识点 字符串的截取替换 和获取 中文字符串的长度 。你可能会疑问为什么不和屏蔽手机号一样直接用substr_replace()处理。这里主要牵扯到php很多函数并没对中文字符的处理。中文不想英文字符一样,一个英文字符占一个字节,一个汉字字符占多个字节,具体占多少字节呢?要看你用的什么编码,UTF-8占3个字节,gbk占2个字节。substr_replace('$str','replace', start, length)中start和length是按照英文字符计算的,包括获取字符长度的strlen()。总之,牵扯到中文字符的计算都要注意你所使用的php内置方法是否兼容中文字符,防止计算字符不准或者出现截取乱码现象的产生。
除特别注明外,本站所有文章均为作者原创。 或分享自己的编程经验,或探讨工作中的问题,或聊以人生趣事。 转载请注明出处来自 https://www.qiusuoweb.com/41.html
运营天数
总访问量
文章数量
-
-
-
交流群:157451741
新浪微博:草莽兴
发布评论