我已經爲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