項目中經常需要公佈一些用戶的信息,比如抽獎結果展示,排行榜等。但是很多涉及到用戶隱私,比如暱稱,姓名,手機號等,這時候就要對用戶敏感信息做處理,最常見的就是對手機號加星號處理。方法也非常簡單,簡單到我再寫這篇之前都在考慮要不要發出來。不過還是簡單分享一下,如果有兄弟用得上至少可以節省一點時間。
/**
* 字符串加指定符號處理
* @param string $str 源字符串
* @param int $start 開頭保留長度
* @param int $end 結尾保留長度
* @param string $symbol 指定符號
* @param bool $fullSymbol 是否全處理成指定符號
* @return string
*/
function secretStr($str, $start = 1 ,$end = 1, $symbol = '*', $fullSymbol = false){
$str = trim($str);
$symbol = trim($symbol);
if (empty($str)){
return '';
}
if(empty($symbol)) $symbol = '*';
if($start < 0) $start = 1;
if($end < 0) $end = 1;
//mb_strlen — 輸入字符串總長度
$strlen = mb_strlen($str, 'utf-8');
//要保留的開頭和結尾的總長度
$numLen = $start + $end;
if($numLen >= $strlen){
return $str;
}
if ($fullSymbol) {
//如果全處理成指定符號
return str_repeat($symbol, $strlen);
} else {
//mb_substr — 獲取要保留的開頭和結尾字符
$firstStr = mb_substr($str, 0, $start, 'utf-8');
$lastStr = mb_substr($str, -1 * $end, $end, 'utf-8');
//str_repeat — 重複一個字符串
return $firstStr . str_repeat($symbol, $strlen - $numLen) . $lastStr;
}
}
當然了不單單可以處理手機號,其他字符串也是可以的。
echo secretStr('13800138000'); //1*********0
echo secretStr('13800138000',3,4); //138****8000
echo secretStr('13800138000',3,4,'#'); //138####8000
echo secretStr('13800138000',3,4,'*',true); //***********
echo secretStr('abcdef',1,2); //a***ef
echo secretStr('江南極客'); //江**客