当前位置:首页 > PHP教程 > php应用 > 列表

PHP中将一个字符串部分字符用星号*替代隐藏的实现代码

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-16 10:18:50 浏览: 评论:0 

有时候我们在开发中会遇到这样一种情况,例如:显示手机号我们需要将中间4位遮挡掉,一般使用“*”号代替,或是显示身份证号码是为了保护个人信息也同样需要遮挡掉4位,故可用到下列方式、代码进行实现:

核心代码:

  1. <?php  
  2.    
  3. /** 
  4.  +---------------------------------------------------------- 
  5.  * 将一个字符串部分字符用*替代隐藏 
  6.  +---------------------------------------------------------- 
  7.  * @param string $string 待转换的字符串 
  8.  * @param int  $bengin 起始位置,从0开始计数,当$type=4时,表示左侧保留长度 
  9.  * @param int  $len  需要转换成*的字符个数,当$type=4时,表示右侧保留长度 
  10.  * @param int  $type  转换类型:0,从左向右隐藏;1,从右向左隐藏;2,从指定字符位置分割前由右向左隐藏;3,从指定字符位置分割后由左向右隐藏;4,保留首末指定字符串 
  11.  * @param string $glue  分割符 
  12.  +---------------------------------------------------------- 
  13.  * @return string 处理后的字符串 
  14.  +---------------------------------------------------------- 
  15.  */ 
  16. function hideStr($string$bengin = 0, $len = 4, $type = 0, $glue = "@") { 
  17.     if (emptyempty($string)) 
  18.         return false; 
  19.     $array = array(); 
  20.     if ($type == 0 || $type == 1 || $type == 4) { 
  21.         $strlen = $length = mb_strlen($string); 
  22.         while ($strlen) { 
  23.             $array[] = mb_substr($string, 0, 1, "utf8"); 
  24.             $string = mb_substr($string, 1, $strlen"utf8"); 
  25.             $strlen = mb_strlen($string); 
  26.         } 
  27.     } 
  28.     if ($type == 0) { 
  29.         for ($i = $bengin$i < ($bengin + $len); $i++) { 
  30.             if (isset($array[$i])) 
  31.                 $array[$i] = "*"
  32.         } 
  33.         $string = implode(""$array); 
  34.     } else if ($type == 1) { 
  35.         $array = array_reverse($array); 
  36.         for ($i = $bengin$i < ($bengin + $len); $i++) { 
  37.             if (isset($array[$i])) 
  38.                 $array[$i] = "*"
  39.         } 
  40.         $string = implode(""array_reverse($array)); 
  41.     } else if ($type == 2) { 
  42.         $array = explode($glue$string); 
  43.         $array[0] = hideStr($array[0], $bengin$len, 1); 
  44.         $string = implode($glue$array); 
  45.     } else if ($type == 3) { 
  46.         $array = explode($glue$string); 
  47.         $array[1] = hideStr($array[1], $bengin$len, 0); 
  48.         $string = implode($glue$array); 
  49.     } else if ($type == 4) { 
  50.         $left = $bengin
  51.         $right = $len
  52.         $tem = array(); 
  53.         for ($i = 0; $i < ($length - $right); $i++) { 
  54.             if (isset($array[$i])) 
  55.                 $tem[] = $i >= $left ? "*" : $array[$i]; 
  56.         } 
  57.         $array = array_chunk(array_reverse($array), $right); 
  58.         $array = array_reverse($array[0]); 
  59.         for ($i = 0; $i < $right$i++) { 
  60.             $tem[] = $array[$i]; 
  61.         } 
  62.         $string = implode(""$tem); 
  63.     } 
  64.     return $string
  65.    
  66.    
  67. $str = '12345678901'
  68. echo hideStr($str,2,4); 

有时候需要考虑中文的替换那么可以参考下面的实现方法

对于字符串某部分使用*号替换的问题:

1.实例:

$username = "linshouyue";

echo substr_replace($username,'****','3','4');

substr_replace()函数 

1.1)第一参数为需处理的字符串

1.2)第二参数为使用的替换符号

1.3)第三/四参数为需要替换的字符串位置(从第三个字符开始替换后四位字符)

但是该函数对于英文字符/数字数没有任何问题得,但是一旦遇到汉字就会出现很尴尬的问题,因为汉字与英文字符的字节是不一样的,可以使用一下方法解决:

  1. /**     * *替换中文汉字 
  2.  
  3.      * @author 月月 
  4.  
  5.      */ 
  6.     function substr_cut($user_name){ 
  7.         $strlen     = mb_strlen($user_name'utf-8'); 
  8.         $firstStr     = mb_substr($user_name, 0, 1, 'utf-8'); 
  9.         $lastStr     = mb_substr($user_name, -1, 1, 'utf-8'); 
  10.         return $strlen == 2 ? $firstStr . str_repeat('*', mb_strlen($user_name'utf-8') - 1) : $firstStr . str_repeat("*"$strlen - 2) . $lastStr
  11.     } 

好了,这篇文章就介绍到这了。

Tags: PHP星号*替代隐藏

分享到: