1

さて、インターネットで数時間検索してみましたが、今のところ役に立ちません。次の通知が表示され続ける理由を突き止めようとしています (はい、これは単なる通知であり、スクリプトの実行を停止するものではないことは承知しています)。

Notice: Undefined index: 05 in [redacted_path]\script.php(31) : regexp code on line 1

このスクリプトは、irc チャネル ログの色の再配置を目的としていました。別のサイトから大きな関数を取得し、ニーズに合わせてわずかに変更しました。もちろん、クレジットはその作成者に帰属します。それはさておき、私は..正規表現に少し慣れていますが、もちろん、問題のあるタイプミスや以下の同様のものを見つけることができるポイントではありません. 任意の支援をいただければ幸いです。

<?php
if (isset($_POST['chn'])) {
    $chn = $_POST['chn'];
    $str = urldecode($_POST['line']);
    $filen = "logs/$chn" . "_" . date('Y_F_d') . ".html";
    $str = preg_replace('/https?:\/\/[^\s"<>]+/', '<a href="$0" target="_blank">$0</a>', $str);
    $logln = mirc2html($str) . "<br />\r\n";
    $logln = str_replace("Â","",$logln);
    file_put_contents($filen,stripcslashes($logln),FILE_APPEND);
}

if (isset($_GET['test'])) {
    echo str_replace("Â","",mirc2html($_GET['test']));
}

function mirc2html($x) {
    $c = array("FFF","000","00007F","009000","FF0000","7F0000","9F009F","FF7F00","FFFF00","00F800","00908F","00FFFF","0000FF","FF00FF","7F7F7F","CFD0CF");
    $x = preg_replace("/\x02(.*?)((?=\x02)\x02|$)/", "<b>$1</b>", $x);
    $x = preg_replace("/\x1F(.*?)((?=\x1F)\x1F|$)/", "<u>$1</u>", $x);
    $x = preg_replace("/\x1D(.*?)((?=\x1D)\x1D|$)/", "<i>$1</i>", $x);
    $x = preg_replace("/\x03(\d\d?),(\d\d?)(.*?)(?(?=\x03)|$)/e", "'<span style=\"color: #'.\$c['$1'].'; background-color: #'.\$c['$2'].';\">$3</span>'", $x, -1, $n1);
    $x = preg_replace("/\x03(\d\d?)(.*?)(?(?=\x03)|$)/e", "'</span><span style=\"color: #'.\$c['$1'].';\">$2</span>'", $x);
    $x = preg_replace("/\x03|\x0F(.*?)/", "<span style=\"color: #000; background-color: #FFF;\">$1</span>", $x);
    $x = str_replace("\n","",$x);
    $x = str_replace("\r","",$x);
    $x = preg_replace("/\<\/span\>/","",$x,1);
    $x = preg_replace("/(\<\/span\>){2}/","</span>",$x);
    return $x;
}
?>

したがって、問題のある行は次のとおりです。

$x = preg_replace("/\x03(\d\d?)(.*?)(?(?=\x03)|$)/e", "'</span><span style=\"color: #'.\$c['$1'].';\">$2</span>'", $x);
4

1 に答える 1

3

エラーの原因は明らかです。変数$c['05']が定義されていません。それを定義するか、それを整数に変換できる関数で置換を変更します-何らかの理由で私は明確ではありません-PHPはその評価された正規表現置換を使用できません(通常、数値文字列は整数に変換されますキーは内部で自動的に)。

あなたがいくつかの提案を開いている場合:

  • コードをリファクタリングして重複部分を削除します(常に何かを実行するコードであり、複数のクラスのコードがあり、各クラスには独自の置換があります)。
  • コールバック関数で置換を実行して、置換をより適切に制御し、色の値を渡すことができるようにします。
于 2012-04-25T09:05:27.337 に答える