これは、まさにこのフォーラムで以前に質問されたことに気づきましたが、提案された解決策は私にとって信頼できるものではありませんでした。
私はこれに1週間以上取り組んでおり、昨日の午前3時まで起きていました.
ご存じない方のために説明すると、mirc は ASCII 制御コードを使用して、文字の色、下線、太さ、斜体を制御します。色のアスキー コードは 3、太字 2、下線 1F、斜体 1D、反転 (黒地に白文字)、16 です。
このデータが入力される形式の例として、(これらの文字は出力されないため、正規表現で):
\x034this text is red\x033this text is green\x03 \x02bold text\x02
\x034,3this text is red with a green background\x03
など。
以下は、私が自分で使用するために変更を試みたが、信頼できない結果を返した 2 つの関数です。そのコードに入る前に、具体的に「信頼できない」と言うと、コードが解析されることもあれば、テキストにまだ制御コードが残っていることもあり、その理由がわかりません。ともかく;
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><span style=\"color: #'.\$c[$1].'; background-color: #'.\$c[$2].';\">$3</span>'", $x);
$x = preg_replace("/\x03(\d\d?)(.*?)(?(?=\x03)|$)/e", "'</span><span style=\"color: #'.\$c[$1].';\">$2</span>'", $x);
//$x = preg_replace("/(\x0F|\x03)(.*?)/", "<span style=\"color: #000; background-color: #FFF;\">$2</span>", $x);
//$x = preg_replace("/\x16(.*?)/", "<span style=\"color: #FFF; background-color: #000;\">$1</span>", $x);
//$x = preg_replace("/\<\/span\>/","",$x,1);
//$x = preg_replace("/(\<\/span\>){2}/","</span>",$x);
return $x;
}
function color_rep($matches) {
$matches[2] = ltrim($matches[2], "0");
$bindings = array(0=>'white',1=>'black',2=>'blue',3=>'green',4=>'red',5=>'brown',6=>'purple',7=>'orange',8=>'yellow',9=>'lightgreen',10=>'#00908F',
11=>'lightblue',12=>'blue',13=>'pink',14=>'grey',15=>'lightgrey');
$preg = preg_match_all('/(\d\d?),(\d\d?)/',$matches[2], $col_arr);
//print_r($col_arr);
$fg = isset($bindings[$matches[2]]) ? $bindings[$matches[2]] : 'transparent';
if ($preg == 1) {
$fg = $bindings[$col_arr[1][0]];
$bg = $bindings[$col_arr[2][0]];
}
else {
$bg = 'transparent';
}
return '<span style="color: '.$fg.'; background: '.$bg.';">'.$matches[3].'</span>';
}
また、関連する場合は、コードが呼び出される場所:
$logln = preg_replace_callback("/(\x03)(\d\d?,\d\d?|\d\d?)(\s?.*?)(?(?=\x03)|$)/","color_rep",$logln);
もちろん、さまざまな php/ajax ベースの irc クライアントによって実行されるメソッドも調べてみましたが、成功していません。この mirc-side を行うことに関しては、私もそこを見てきました。結果は php よりも信頼性が高いものの、サーバーに送信されるデータが指数関数的に増加し、ソケットがアップロード時にタイムアウトになるので、そうではありません。実行可能なオプションです。
いつものように、この問題の助けをいただければ幸いです。