PHP将敏感文字内容替换为星号的操作方法

科技   2024-12-19 17:27   湖南  

 

以下是几种在PHP中将敏感文字内容替换为星号的常见操作方法:

使用str_replace()函数

这是最基本的方法,适用于简单的、明确的敏感词替换 。以下是一个示例:

<?php
// 要检查的原始文本
$text = "这个文本包含一些敏感词,比如暴力和色情等。";
// 敏感词数组
$sensitiveWords = array('暴力''色情');
// 替换敏感词为星号
$replacedText = str_replace($sensitiveWordsstr_repeat('*'strlen($sensitiveWords[0])), $text);
echo $replacedText;
?>

在上述代码中,定义了一个包含敏感词的数组 $sensitiveWords,然后使用 str_replace() 函数将这些敏感词替换为相同长度的星号字符串。str_repeat('*') 函数用于生成一个由星号组成的字符串,其长度与被替换的敏感词相同。

使用preg_replace()函数配合正则表达式

当敏感词可以出现在文本的任何位置,并且可能有多种变体时,使用正则表达式会更加灵活 。以下是一个示例:

<?php
// 要检查的原始文本
$text = "这个文本包含一些敏感词,比如violence和pornography等。";
// 敏感词数组
$sensitiveWords = array('violence''pornography');
// 创建一个正则表达式模式,匹配所有敏感词
$pattern = '/'implode('|'array_map('preg_quote'$sensitiveWords)). '/i';
// 使用正则表达式替换敏感词为星号
$replacedText = preg_replace($patternstr_repeat('*'max(array_map('strlen'$sensitiveWords))), $text);
echo $replacedText;
?>

在这个例子中,使用 preg_quote() 函数对敏感词进行转义,以确保它们在正则表达式中被正确处理。implode() 和 array_map() 函数用于创建一个正则表达式模式,它可以匹配数组中的任何敏感词。max() 函数用于确定最长敏感词的长度,以便替换时使用相应数量的星号 。

自定义函数实现特定规则的替换

例如,可以定义一个函数来实现保留字符串的首尾部分,将中间部分替换为星号 。以下是一个示例函数:

<?php
function secret_str($str$prefix = 4$suffix = 4$max_star = 4)
{
    if (empty($str) || empty($max_star)) return $str;

    $strLen = strlen($str);
    if ($prefix > 0 && $strLen <= $prefixreturn $str;
    if ($suffix > 0 && $strLen <= $suffixreturn $str;

    if ($strLen <= ($prefix + $suffix)) {
        if ($prefix > 0) {
            $starNum = $strLen - $prefix;
            $star = str_repeat("*"$starNum);
            return substr($str0$prefix). $star;
        } else {
            $starNum = $strLen - $suffix;
            $star = str_repeat("*"$starNum);
            return $starsubstr($str$starNum);
        }
    }

    if ($prefix > 0) {
        $first = substr($str0$prefix);
    } else {
        $first = "";
    }
    if ($suffix > 0) {
        $end = substr($str$strLen - $suffix);
    } else {
        $end = "";
    }

    $starNum = $strLen - $prefix - $suffix;
    $starNum = min($starNum$max_star);
    $middle = str_repeat("*"$starNum);

    return $first$middle$end;
}
?>

你可以根据具体需求调用这个函数,如 secret_str($str, 2, 2) 来将字符串 $str 的首尾各保留2个字符,中间部分替换为星号。

针对特定类型数据的替换方法

  • • 手机号码脱敏 :

    • • 字符串截取法

<?php
$tel = '13812345678';
$new_tel1 = substr($tel03).'****'.substr($tel7);
var_dump($new_tel1);
?>
- **替换字符串的子串法**:
<?php
$tel = '13812345678';
$new_tel2 = substr_replace($tel'****'34);
var_dump($new_tel2);
?>
- **正则表达式法**:
<?php
$tel = '13812345678';
$new_tel3 = preg_replace('/(\d{3})\d{4}(\d{4})/''$1****$2'$tel);
var_dump($new_tel3);
?>

以上三种方法都可以将手机号码中间四位替换为星号,输出结果均为 138****5678 。


精英博客探索
关注热点,传递正能量。
 最新文章