Maison > développement back-end > Problème PHP > 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
Libérer: 2023-03-03 08:20:01
original
3361 Les gens l'ont consulté

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);
Copier après la connexion

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;);
Copier après la connexion

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;
    }
Copier après la connexion

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!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal