有时候我们在开发中会遇到这样一种情况,例如:显示手机号我们需要将中间4位遮挡掉,一般使用“*”号代替,或是显示身份证号码是为了保护个人信息也同样需要遮挡掉4位,故可用到下列方式、代码进行实现:
/**
* 隐藏部分字符串
*
* @param string $str 要处理的字符串
* @param int $start 开始隐藏位置
* @param int $length 隐藏长度 (不支持负数)
* @param string $mask 掩码 默认 *
* @return string
*/
function str_hide($str, $start = 0, $length = 1, $mask = '*'){
return substr_replace($str, str_pad('', $length, $mask), $start, strlen(substr($str, $length + 1)));
}
实际使用中 完全没有问题, 但遇到隐藏姓名的时候该函数又不支持了
所以参考 PHP 的函数明明规则 又写下面代码
/**
* 隐藏部分字符串 支持多字节字符
*
* @param string $str 要处理的字符串
* @param int $start 开始隐藏位置
* @param int $length 隐藏长度 (不支持负数)
* @param string $mask 掩码 默认 *
* @return string
*/
function md_str_hide($str, $start = 0, $length = 1, $mask = '*'){
return mb_substr($str, 0, $start) . str_pad('', $length, $mask) . mb_substr($str, $start + $length);
// return substr_replace($str, str_pad('', $length, $mask), strlen(mb_substr($str, 0, $start)), strlen(mb_substr($str, $length + 1)));
}