我意识到这已被问及之前,在这个非常论坛上,但提出的解决方案对我来说并不可靠。Mirc控制代码到html,通过php
我一直在这一个星期或更多,现在,我昨天熬夜”,直到凌晨三时它的工作...但我离题了,让我对这个问题的另一方面:
对于那些不知道的,mirc使用ascii控制代码来控制字符颜色,下划线,重量和斜体。颜色的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
等等。
下面是我尝试修改自己使用的两个函数,但返回了不可靠的结果。在进入代码之前,为了具体说明'不可靠',有时代码会解析,其他时候仍然会有控制代码留在文本中,我不知道为什么。无论如何;
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端,我也在那里查看,虽然结果比php更可靠,但发送到服务器的数据会以指数方式增长,直到套接字超出上传时间,所以它不是'这是一个可行的选择。
一如既往,任何有关此事的帮助将不胜感激。
嗯,看来我终于有一些具体的真正离开。再次感谢你,虽然不幸的是,我很快就要到凌晨2点40分了。明天我必须开始工作。但是,再次感谢您的帮助。 – Daedalus 2012-04-26 09:39:17