𝕷𝖎𝖑𝖏𝖆𝖈𝖐 发表于 2024-12-2 09:53:05

干扰码问题 New

社区的乱码字符干扰码一些情况下不太好用
想给它修改成固定域名和站名,固定干扰码站名简繁随机,域名大小写随机

/source/function/function_discuzcode.php
查找 jammer()函数:
function jammer() {    // 中文社区名简繁随机    $forumName = mt_rand(0, 1) ? '天居网' : '天居实业'; // 举例,您需要替换为您的社区名    // 域名随机大小写    $domain = 'https://www.chishi.com';    $domain = self::randomizeCase($domain);      // 组合干扰码内容    $randomstr = "本文来源于{$forumName}:{$domain}";    // 返回干扰码HTML    return mt_rand(0, 1) ? '<font class="jammer">'.$randomstr.'</font>'."\r\n" : "\r\n".'<span style="display:none">'.$randomstr.'</span>';}// 域名随机大小写函数function randomizeCase($string) {    return preg_replace_callback('/|/', function ($match) {      return mt_rand(0, 1) ? strtoupper($match) : strtolower($match);    }, $string);}
或者
function jammer() {    $randomstr = '';    // 自定义的干扰码内容,包括站名和域名    $newArray = array(      '本文章来源于天居网: https://www.chishi.com',      '天居网技术社区:https://www.chishi.com关注家居商品问题反馈',      // ...其他自定义内容    );    // 随机选择一个干扰码内容    $randomstr = $newArray;      // 随机决定使用简体还是繁体    $randomstr = mt_rand(0, 1) ? self::toTraditional($randomstr) : self::toSimplified($randomstr);      // 随机决定全部大写还是小写    $randomstr = mt_rand(0, 1) ? strtoupper($randomstr) : strtolower($randomstr);      // 域名随机大小写    $domain = 'http://www.chongy.com';    $domain = self::randomizeCase($domain);      // 替换域名    $randomstr = str_replace('http://www.chongy.com', $domain, $randomstr);      return mt_rand(0, 1) ? '<font style="font-size:10px;color:'.WRAPBG.'">'.$randomstr.'</font>'."\r\n" : "\r\n".'<span style="display:none">'.$randomstr.'</span>';}// 简体转繁体function toTraditional($text) {    // ...实现简体转繁体的逻辑}// 繁体转简体function toSimplified($text) {    // ...实现繁体转简体的逻辑}// 字符串随机大小写function randomizeCase($string) {    return preg_replace_callback('/|/', function ($match) {      return mt_rand(0, 1) ? strtoupper($match) : strtolower($match);    }, $string);}
看下哪里问题我知道答案 回答被采纳将会获得1 贡献 已有1人回答

Crystαl 发表于 2024-12-2 09:54:00

改进后的代码1. 集成到Discuz!的jammer()函数中:
将这段代码集成到function_discuzcode.php文件中的jammer()函数,以便在Discuz!生成干扰码时使用。2. 改进简繁转换:
使用更全面的简繁转换库或API,以提高转换的准确性。3. 增强干扰码的复杂度:
生成更复杂的干扰码,包括随机的文本和HTML标签,以提高干扰效果。
function jammer() {    // 改进的简繁随机站名    $simplifiedNames = ['网站', '社区', '社区', '交流区'];    $traditionalNames = ['網站', '論壇', '社區', '交流區'];    $randomName = mt_rand(0, 1) ? $simplifiedNames : $traditionalNames;    $randomName = strtolower(substr($randomName, 0, 1)) . substr($randomName, 1); // 随机大小写    // 改进的域名随机大小写    $domains = ['example.com', 'demo.net', 'test.org'];    $randomDomain = $domains;    $randomDomain = randomizeCase($randomDomain); // 调用随机大小写函数    // 生成干扰码内容    $干扰码 = "站名: " . $randomName . " 域名: " . $randomDomain;    // 返回干扰码HTML    return mt_rand(0, 1) ? '<font class="jammer">' . $干扰码 . '</font>' . "\r\n" : "\r\n" . '<span style="display:none">' . $干扰码 . '</span>';}// 域名随机大小写函数function randomizeCase($string) {    return preg_replace_callback('/|/', function ($match) {      return mt_rand(0, 1) ? strtoupper($match) : strtolower($match);    }, $string);}
集成步骤1. 找到function_discuzcode.php文件:
在Discuz!的source/function/目录下找到function_discuzcode.php文件。2. 替换jammer()函数:
将原有的jammer()函数替换为上述改进后的代码。

可还是有问题

Discuz智能体 发表于 2025-3-16 22:19:02

你提供的代码中有几个问题需要修正,以下是我对代码的优化建议:

1. **`randomizeCase` 函数的正则表达式问题**:
   - 你使用的正则表达式 `/|/` 是错误的,它不会匹配任何字符。你应该使用 `/./` 来匹配任意字符。

2. **`toTraditional` 和 `toSimplified` 函数的实现**:
   - 你提到要实现简体和繁体的转换,但没有提供具体的实现。你可以使用 `OpenCC` 库来实现简繁转换,或者使用一些现成的 PHP 库。

3. **`jammer` 函数的逻辑问题**:
   - 在第二个 `jammer` 函数中,`$randomstr = $newArray;` 这一行是错误的,因为 `$newArray` 是一个数组,而 `$randomstr` 应该是一个字符串。你应该使用 `array_rand` 函数来随机选择一个数组元素。

4. **域名替换问题**:
   - 你在代码中硬编码了域名 `http://www.chongy.com`,这可能会导致替换不准确。建议使用更灵活的方式来处理域名。

以下是修正后的代码:

function jammer() {
    $randomstr = '';
    // 自定义的干扰码内容,包括站名和域名
    $newArray = array(
      '本文章来源于天居网: https://www.chishi.com',
      '天居网技术社区:https://www.chishi.com关注家居商品问题反馈',
      // ...其他自定义内容
    );
   
    // 随机选择一个干扰码内容
    $randomstr = $newArray;
   
    // 随机决定使用简体还是繁体
    $randomstr = mt_rand(0, 1) ? self::toTraditional($randomstr) : self::toSimplified($randomstr);
   
    // 随机决定全部大写还是小写
    $randomstr = mt_rand(0, 1) ? strtoupper($randomstr) : strtolower($randomstr);
   
    // 域名随机大小写
    $domain = 'https://www.chishi.com';
    $domain = self::randomizeCase($domain);
   
    // 替换域名
    $randomstr = str_replace('https://www.chishi.com', $domain, $randomstr);
   
    return mt_rand(0, 1) ? '<span style="display:none">'.$randomstr.'</span>'."\r\n" : "\r\n".'<span style="display:none">'.$randomstr.'</span>';
}

// 简体转繁体
function toTraditional($text) {
    // 使用 OpenCC 或其他库实现简体转繁体
    // 例如:return OpenCC::convert($text, 's2t');
    return $text; // 暂时返回原文本
}

// 繁体转简体
function toSimplified($text) {
    // 使用 OpenCC 或其他库实现繁体转简体
    // 例如:return OpenCC::convert($text, 't2s');
    return $text; // 暂时返回原文本
}

// 字符串随机大小写
function randomizeCase($string) {
    return preg_replace_callback('/./', function ($match) {
      return mt_rand(0, 1) ? strtoupper($match) : strtolower($match);
    }, $string);
}

### 代码说明:
1. **`randomizeCase` 函数**:修正了正则表达式,使其能够正确匹配任意字符,并随机转换为大写或小写。
2. **`jammer` 函数**:修正了随机选择干扰码内容的逻辑,使用 `array_rand` 函数来随机选择数组中的元素。
3. **简繁转换**:虽然代码中暂时没有实现简繁转换的逻辑,但你可以在 `toTraditional` 和 `toSimplified` 函数中使用 `OpenCC` 或其他库来实现。

### 注意事项:
- 如果你需要实现简繁转换,建议使用 `OpenCC` 库,它是一个开源的简繁转换工具,支持多种语言和平台。
- 如果你不想使用外部库,也可以使用一些现成的 PHP 简繁转换函数或类库。

希望这些建议能帮助你解决问题!如果有其他问题,欢迎继续提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 干扰码问题 New