Maison  >  Article  >  développement back-end  >  Comment masquer une partie d’une chaîne avec des astérisques en PHP ?

Comment masquer une partie d’une chaîne avec des astérisques en PHP ?

coldplay.xixi
coldplay.xixioriginal
2020-07-24 10:07:573286parcourir

Méthode PHP pour remplacer les caractères masqués par des astérisques dans une chaîne : utilisez la fonction [substr_replace($AA,'*','1','2')] pour remplacer, où le premier paramètre est le requis La chaîne à traiter, le deuxième paramètre est le symbole de remplacement utilisé et les troisième et quatrième paramètres sont les positions de chaîne qui doivent être remplacées.

Comment masquer une partie d’une chaîne avec des astérisques en PHP ?

Méthode PHP pour remplacer les caractères masqués par des astérisques dans une chaîne :

Code principal :

<?php 
 
/**
 +----------------------------------------------------------
 * 将一个字符串部分字符用*替代隐藏
 +----------------------------------------------------------
 * @param string $string 待转换的字符串
 * @param int  $bengin 起始位置,从0开始计数,当$type=4时,表示左侧保留长度
 * @param int  $len  需要转换成*的字符个数,当$type=4时,表示右侧保留长度
 * @param int  $type  转换类型:0,从左向右隐藏;1,从右向左隐藏;2,从指定字符位置分割前由右向左隐藏;3,从指定字符位置分割后由左向右隐藏;4,保留首末指定字符串
 * @param string $glue  分割符
 +----------------------------------------------------------
 * @return string 处理后的字符串
 +----------------------------------------------------------
 */
function hideStr($string, $bengin = 0, $len = 4, $type = 0, $glue = "@") {
if (empty($string))
return false;
$array = array();
if ($type == 0 || $type == 1 || $type == 4) {
$strlen = $length = mb_strlen($string);
while ($strlen) {
$array[] = mb_substr($string, 0, 1, "utf8");
$string = mb_substr($string, 1, $strlen, "utf8");
$strlen = mb_strlen($string);
}
}
if ($type == 0) {
for ($i = $bengin; $i < ($bengin + $len); $i++) {
if (isset($array[$i]))
$array[$i] = "*";
}
$string = implode("", $array);
} else if ($type == 1) {
$array = array_reverse($array);
for ($i = $bengin; $i < ($bengin + $len); $i++) {
if (isset($array[$i]))
$array[$i] = "*";
}
$string = implode("", array_reverse($array));
} else if ($type == 2) {
$array = explode($glue, $string);
$array[0] = hideStr($array[0], $bengin, $len, 1);
$string = implode($glue, $array);
} else if ($type == 3) {
$array = explode($glue, $string);
$array[1] = hideStr($array[1], $bengin, $len, 0);
$string = implode($glue, $array);
} else if ($type == 4) {
$left = $bengin;
$right = $len;
$tem = array();
for ($i = 0; $i < ($length - $right); $i++) {
if (isset($array[$i]))
$tem[] = $i >= $left ? "*" : $array[$i];
}
$array = array_chunk(array_reverse($array), $right);
$array = array_reverse($array[0]);
for ($i = 0; $i < $right; $i++) {
$tem[] = $array[$i];
}
$string = implode("", $tem);
}
return $string;
}
 
 
$str = &#39;12345678901&#39;;
echo hideStr($str,2,4);

Parfois, vous devez envisager la substitution chinoise, vous pouvez alors vous référer à la méthode d'implémentation suivante

Pour le problème de l'utilisation de * pour remplacer certaines parties de la chaîne :

Exemple :

$username = "linshouyue"; 
echo substr_replace($username,&#39;****&#39;,&#39;3&#39;,&#39;4&#39;);

substr_replace() fonction

  • Le premier paramètre est la chaîne à traiter

  • Le deuxième paramètre est le symbole de remplacement utilisé

  • Le troisième/quatrième paramètre est la position de la chaîne qui doit être remplacée (en remplaçant les quatre derniers caractères à partir du troisième caractère)

Mais cette fonction n'a aucun problème avec le nombre de caractères/chiffres anglais, mais une fois qu'elle rencontrera des caractères chinois, il y aura des problèmes très embarrassants, car les octets de caractères chinois et de caractères anglais sont différents. Vous pouvez utiliser la méthode suivante pour. résolvez-le :

/**     * *替换中文汉字
     * @author 月月
     */
    function substr_cut($user_name){
        $strlen     = mb_strlen($user_name, &#39;utf-8&#39;);
        $firstStr     = mb_substr($user_name, 0, 1, &#39;utf-8&#39;);
        $lastStr     = mb_substr($user_name, -1, 1, &#39;utf-8&#39;);
        return $strlen == 2 ? $firstStr . str_repeat(&#39;*&#39;, mb_strlen($user_name, &#39;utf-8&#39;) - 1) : $firstStr . str_repeat("*", $strlen - 2) . $lastStr;
    }

Recommandations d'apprentissage associées : Programmation PHP de l'entrée à la maîtrise

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn