我已经为PHP IRC bot编写了一个模块,该模块使用数据库来保存哪些刻度与维基百科帐户“链接”。要做到这一点,我有以下代码:PHP不会替换特殊字符行
$pudb_wnas = file('cache.ucb');
foreach ($pudb_wnas as $lineNumber => $line) {
if (preg_match("/" . p_chars($ex[4]) . "~!/i", $line) != false) {
$found = true;
break;
}
}
if ($found) {
echo "!!!!!!!!!!!!!!!!FOUND!!!!!!!!!!!!!!!!!!\n";
$lines = file('cache.ucb', FILE_IGNORE_NEW_LINES);
$wnas_bu = $lines[$lineNumber];
$lines[$lineNumber] = trim($wnas_bu) . "~!" . $mask[0];
file_put_contents('cache.ucb', implode("\n", $lines));
} else {
$udb_wnas = fopen("cache.ucb", "a+");
fwrite($udb_wnas, "\n" . p_chars($ex[4]) . "~!" . $mask[0]);
fclose($udb_wnas);
}
的p_chars
功能,旁边有dp_chars
,是一个自定义功能来添加或删除反斜杠一些特殊字符:
function p_chars($text) {
$m_text = str_replace("(", "\(", $text);
$m_text = str_replace(")", "\)", $m_text);
return $m_text;
}
// Función para descodificar p_chars
function dp_chars($text) {
$m_text = str_replace("\(", "(", $text);
$m_text = str_replace("\)", ")", $m_text);
return $m_text;
}
的cache.ucb文件(这真的是nas.udb,但这是另一个故事)内容位于here。您也可以看到完整的代码here。
变量$ ex [4]在此上下文中表示传递给%nas命令的参数,该命令在IRC中使用,如下所示:%nas Test
。
当您调用该命令时,它会在cache.ucb文件中搜索以$ex[4]."~!"
开头的行。我使用~!
作为分隔符。例如,如果命令参数是%nas Testing
,它会搜索Testing~!
。如果它找到了这条线,它会自己替换它加上"~!".$mask[0]
。 $mask[0]
是调用该命令的用户的昵称。
如果找不到该行,则会按照此结构添加一个新行:$ex[4]~!$mask[0]
。因此,作为例子,如果Bousie做了%nas Testing
,它会搜索Testing~!
。假设该行是Testing~!Test
,它将用Testing~!Test~!Bousie
代替它。否则,它会添加行Testing~!Bousie
。
问题是,如果Bousie做了%nas UnRar
,它会正常工作。但如果Bousie做了%nas I(L)Verano
,它会添加一条新线。但已经有I(L)Verano系列。请注意,应该转换之前I(L)Verano
参数I\(L\)Verano
,所以我不知道我在做这个代码错了什么。
你真的会帮我告诉我我做错了什么。哦,我尝试了很多我在这里看到的代码,我尝试过将它们混合在一起......也许问题出在p_chars和dp_chars函数上?不过,我看不到它!
三江源,三江源,三江源!它完美的作品。你可以看看我是如何在我的代码中调整它的:https://github.com/unrar/unbot/blob/master/sybil.php再次感谢!虽然,我有一个问题:为什么......作为$ k =>&$ line'?为什么是&$ line?再次感谢,并再次! –
请参阅http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php ..讨论所有符号 – Baba