PHP隐藏部分字符串 并用星号*替代

有时候我们在开发中会遇到这样一种情况,例如:显示手机号我们需要将中间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)));
}

Post Author: admin