[PHP]在bash中输出彩色文本
授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/389)的形式标明文章原始出处和作者信息及本声明。先看图吧:
乱不乱?这是我自己用的一个web游戏机器人程序的输出,游戏自然一切都是数字说了算,可每次看这一大堆数字实在是让我头疼,从中找出有用的数据太难了,对齐、缩进都办法也不怎么见效,突然我想到,如果用escape color输出彩色的文本,应该看起来会舒服很多吧?
说到escape color,用过bash的人应该都见过,只是不知道它叫这么名字而已。ls中彩色的文件、目录名就是用escape color来实现的。早些年用得比较多的telnet形式的bbs,它的颜色也是escape color,最明显的特征就是bbs文章被转贴到别处的时候,经常会多出一些ESC什么的字符出来,这就是escape color的控制字符。
想完整的了解escape color,资料很多,wikipedia - ANSI escape code就有比较完整的解释,中文的资料也不少,比如啦啦~在bash下输出彩色的文本,甚至还有人做出了颜色表:The 256 color mode of xterm。
不用觉得眼花缭乱,简单说来,escape code就是在终端(terminal)中输出的控制字符,不光包括文字颜色,还可以控制很多其它内容,当然,颜色是比较常用的,所以习惯称之为escape color。我在这里也只讲颜色,其它控制字符的使用方式大同小异,但需要主意不同的终端类型可能会略有区别。
escape color的格式为:
<ESC>[{attr};{fg};{bg}m
其中<ESC>[是起始字符,在bash中一般是16进制的0×1b,也就是八进制的033,十进制的27,另外一种表现方式就是^[,熟悉吧,在bash中按一下Ctrl+v再按ESC它就出来了。后面分别是attr模式、fg前景色、bg背景色,中间用逗号;间隔,最后用字母m结尾。
attr的取值有:
0 Reset All Attributes (return to normal mode) #重置所有设置,回归自然
1 Bright (Usually turns on BOLD) # 高亮/加粗
2 Dim
3 Underline
5 Blink
7 Reverse
8 Hidden
fg的取值有:
30 Black
31 Red
32 Green
33 Yellow
34 Blue
35 Magenta
36 Cyan
37 White
bg的取值有:
40 Black
41 Red
42 Green
43 Yellow
44 Blue
45 Magenta
46 Cyan
47 White
可以看到,attr/fg/bg的用值范围不重叠,所以空缺哪个无所谓。
在用php输出的时候,只需要在正常字符串内容中,加入适当的escape color代码就可以了,其实其它应用程序也是类似操作的,并不需要额外的设置,比如:
$ php -r 'echo "\x1b[5;31;44m第一种色彩\x1b[3;34;41m第二种色彩\x1b[0m 回归自然\n";'
看到彩色了吧?秀一下我那个机器人美化之后的界面:
顺便说一句,把字符串储存到文件中的时候,escape color也可以一起存上的,浏览时,cat和tail默认就支持颜色显示,less则需要带上-R参数才行。



Save to Browser Favorites
Ask
backflip
blinklist
BlogBookmark
Bloglines
BlogMarks
Blogsvine
BUMPzee!
CiteULike
co.mments
Connotea
del.icio.us
DotNetKicks
Digg
diigo
dropjack.com
dzone
Facebook
Fark
Faves
Feed Me Links
Friendsite
folkd.com
Furl
Google
Hugg
Jeqq
Kaboodle
linkaGoGo
LinksMarker
Ma.gnolia
Mister Wong
Mixx
MySpace
MyWeb
Netvouz
Newsvine
PlugIM
popcurrent
Propeller
Reddit
Rojo
Segnalo
Shoutwire
Simpy
sk*rt
Slashdot
Sphere
Sphinn
Spurl.net
Squidoo
StumbleUpon
Technorati
ThisNext
Webride
Windows Live
Yahoo!
Email This to a Friend
If you like this then please subscribe to the
March 18th, 2008 at 5:56:31
Gold 2,603,649,618
………………..
真有钱啊…..
看上去好像MUD似的呢?
勾起了我去搞MUD的冲动呢…….
[Reply]
March 18th, 2008 at 11:32:22
钱多是因为通货膨胀。。。。
不是mud,是网页游戏,网站在这里:http://www.standardwarfare.com/
人不是很多,比较简单。
[Reply]