<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fwolf's Blog &#187; color - Fwolf's Blog</title>
	<atom:link href="http://www.fwolf.com/blog/post/tag/color/feed" rel="self" type="application/rss+xml" />
	<link>http://www.fwolf.com/blog</link>
	<description>随心·随意·随缘·努力～</description>
	<lastBuildDate>Sun, 29 Aug 2010 14:52:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>[PHP]在bash中输出彩色文本</title>
		<link>http://www.fwolf.com/blog/post/389</link>
		<comments>http://www.fwolf.com/blog/post/389#comments</comments>
		<pubDate>Mon, 17 Mar 2008 16:57:13 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[color]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/post/389</guid>
		<description><![CDATA[先看图吧： 乱不乱？这是我自己用的一个web游戏机器人程序的输出，游戏自然一切都是数字说了算，可每次看这一大堆数字实在是让我头疼，从中找出有用的数据太难了，对齐、缩进都办法也不怎么见效，突然我想到，如果用escape color输出彩色的文本，应该看起来会舒服很多吧？ 说到escape color，用过bash的人应该都见过，只是不知道它叫这么名字而已。ls中彩色的文件、目录名就是用escape color来实现的。早些年用得比较多的telnet形式的bbs，它的颜色也是escape color，最明显的特征就是bbs文章被转贴到别处的时候，经常会多出一些ESC什么的字符出来，这就是escape color的控制字符。 想完整的了解escape color，资料很多，wikipedia &#8211; ANSI escape code就有比较完整的解释，中文的资料也不少，比如啦啦~在bash下输出彩色的文本，甚至还有人做出了颜色表：The 256 color mode of xterm。 不用觉得眼花缭乱，简单说来，escape code就是在终端（terminal）中输出的控制字符，不光包括文字颜色，还可以控制很多其它内容，当然，颜色是比较常用的，所以习惯称之为escape color。我在这里也只讲颜色，其它控制字符的使用方式大同小异，但需要主意不同的终端类型可能会略有区别。 escape color的格式为： &#60;ESC&#62;[{attr};{fg};{bg}m 其中&#60;ESC&#62;[是起始字符，在bash中一般是16进制的0x1b，也就是八进制的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的取值有： [...]]]></description>
			<content:encoded><![CDATA[<p>先看图吧：</p>

<p><a href="http://www.flickr.com/photos/fwolf/2341037870/" title="PHP在bash中输出彩色文本 by fwolf, on Flickr"><img src="http://farm3.static.flickr.com/2259/2341037870_e7a216bdf3.jpg" width="500" height="233" alt="PHP在bash中输出彩色文本" /></a></p>

<p>乱不乱？这是我自己用的一个web游戏机器人程序的输出，游戏自然一切都是数字说了算，可每次看这一大堆数字实在是让我头疼，从中找出有用的数据太难了，对齐、缩进都办法也不怎么见效，突然我想到，如果用escape color输出彩色的文本，应该看起来会舒服很多吧？</p>

<p>说到escape color，用过bash的人应该都见过，只是不知道它叫这么名字而已。ls中彩色的文件、目录名就是用escape color来实现的。早些年用得比较多的telnet形式的bbs，它的颜色也是escape color，最明显的特征就是bbs文章被转贴到别处的时候，经常会多出一些<code>ESC</code>什么的字符出来，这就是escape color的控制字符。</p>

<p>想完整的了解escape color，资料很多，<a href="http://en.wikipedia.org/wiki/ANSI_escape_code">wikipedia &#8211; ANSI escape code</a>就有比较完整的解释，中文的资料也不少，比如<a href="http://www.fedorachina.cn/index.php/topic,124.0.html">啦啦~在bash下输出彩色的文本</a>，甚至还有人做出了颜色表：<a href="http://www.frexx.de/xterm-256-notes/">The 256 color mode of xterm</a>。</p>

<p>不用觉得眼花缭乱，简单说来，escape code就是在终端（terminal）中输出的控制字符，不光包括文字颜色，还可以控制很多其它内容，当然，颜色是比较常用的，所以习惯称之为escape color。我在这里也只讲颜色，其它控制字符的使用方式大同小异，但需要主意不同的终端类型可能会略有区别。</p>

<p>escape color的格式为：</p>

<pre><code>&lt;ESC&gt;[{attr};{fg};{bg}m
</code></pre>

<p>其中<code>&lt;ESC&gt;[</code>是起始字符，在bash中一般是16进制的0x1b，也就是八进制的033，十进制的27，另外一种表现方式就是<code>^[</code>，熟悉吧，在bash中按一下Ctrl+v再按ESC它就出来了。后面分别是<code>attr</code>模式、<code>fg</code>前景色、<code>bg</code>背景色，中间用逗号<code>;</code>间隔，最后用字母<code>m</code>结尾。</p>

<p>attr的取值有：</p>

<pre><code>0   Reset All Attributes (return to normal mode) #重置所有设置，回归自然
1   Bright (Usually turns on BOLD) # 高亮/加粗
2   Dim
3   Underline
5   Blink
7   Reverse
8   Hidden
</code></pre>

<p>fg的取值有：</p>

<pre><code>30  Black
31  Red
32  Green
33  Yellow
34  Blue
35  Magenta
36  Cyan
37  White
</code></pre>

<p>bg的取值有：</p>

<pre><code>40  Black
41  Red
42  Green
43  Yellow
44  Blue
45  Magenta
46  Cyan
47  White
</code></pre>

<p>可以看到，attr/fg/bg的用值范围不重叠，所以空缺哪个无所谓。</p>

<p>在用php输出的时候，只需要在正常字符串内容中，加入适当的escape color代码就可以了，其实其它应用程序也是类似操作的，并不需要额外的设置，比如：</p>

<pre><code>$ php -r 'echo "\x1b[5;31;44m第一种色彩\x1b[3;34;41m第二种色彩\x1b[0m 回归自然\n";'
</code></pre>

<p>看到彩色了吧？秀一下我那个机器人美化之后的界面：</p>

<p><a href="http://www.flickr.com/photos/fwolf/2341037976/" title="PHP在bash中输出彩色文本 by fwolf, on Flickr"><img src="http://farm4.static.flickr.com/3020/2341037976_b8dec03114.jpg" width="500" height="329" alt="PHP在bash中输出彩色文本" /></a></p>

<p>顺便说一句，把字符串储存到文件中的时候，escape color也可以一起存上的，浏览时，cat和tail默认就支持颜色显示，less则需要带上<code>-R</code>参数才行。</p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/bash" title="bash" rel="tag">bash</a>, <a href="http://www.fwolf.com/blog/post/tag/color" title="color" rel="tag">color</a>, <a href="http://www.fwolf.com/blog/post/tag/php" title="PHP" rel="tag">PHP</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/347" title="升级MT dv 3.0主机到php5 (2007-08-09)">升级MT dv 3.0主机到php5</a> (9)</li>
	<li><a href="http://www.fwolf.com/blog/post/300" title="针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS） (2007-03-18)">针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS）</a> (3)</li>
	<li><a href="http://www.fwolf.com/blog/post/443" title="配置安全的共享web服务器（抛砖引玉） (2009-06-09)">配置安全的共享web服务器（抛砖引玉）</a> (4)</li>
	<li><a href="http://www.fwolf.com/blog/post/400" title="选择Eclipse PHP Development Tools(PDT)作为PHP开发工具 (2008-05-03)">选择Eclipse PHP Development Tools(PDT)作为PHP开发工具</a> (8)</li>
	<li><a href="http://www.fwolf.com/blog/post/176" title="让phpmailer支持中文名称的附件 (2006-05-23)">让phpmailer支持中文名称的附件</a> (5)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/389/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
