<?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>Leon&#039;s blog &#187; php</title>
	<atom:link href="http://www.leonzhang.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.leonzhang.com</link>
	<description>关注: 开源&#38;互联网, GTD with open source and Web</description>
	<lastBuildDate>Mon, 30 Jan 2012 14:24:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>PHP里的md5函数与linux的md5sum命令的区别</title>
		<link>http://www.leonzhang.com/2011/10/23/php-md5-vs-linux-md5sum/</link>
		<comments>http://www.leonzhang.com/2011/10/23/php-md5-vs-linux-md5sum/#comments</comments>
		<pubDate>Sun, 23 Oct 2011 06:17:13 +0000</pubDate>
		<dc:creator>leon</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[其他]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.leonzhang.com/?p=806</guid>
		<description><![CDATA[有好几次碰到使用Linux的md5sum命令产出的散列值,跟PHP的md5函数,或者MySQL的md5函数产生的不一样的问题. 通常比较懒,就没细想,直接使用PHP产生的算了;没想过难道算法还会有不同. 其实没有不同的算法,md5在哪里的计算方法只有一个.原因不过是因为使用md5sum时,有时候不小心会把换行符也作为计算的内容,结果实际上是散列的对象不同,自然结果也就不同了.而在Linux命令行状态下,我通常注意不到换行的存在. 以字符串&#8217;123&#8242;为例,PHP的计算结果是: 比如下列语句实际上是对”123\n”进行求散列,而不是对&#8217;123&#8242;求散列. 正确的写法应该是通过echo的&#8217;-n&#8217;选项,让echo不要输出换行符,这样结果就一样了.]]></description>
			<content:encoded><![CDATA[<p>有好几次碰到使用Linux的md5sum命令产出的散列值,跟PHP的md5函数,或者MySQL的md5函数产生的不一样的问题.<br />
通常比较懒,就没细想,直接使用PHP产生的算了;没想过难道算法还会有不同.</p>
<p>其实没有不同的算法,md5在哪里的计算方法只有一个.原因不过是因为使用md5sum时,有时候不小心会把换行符也作为计算的内容,结果实际上是散列的对象不同,自然结果也就不同了.而在Linux命令行状态下,我通常注意不到换行的存在.</p>
<p>以字符串&#8217;123&#8242;为例,PHP的计算结果是:</p>
<pre class="brush: bash; title: ; notranslate">
$ php -r 'echo md5(&quot;123&quot;);'
202cb962ac59075b964b07152d234b70
</pre>
<p>比如下列语句实际上是对”123\n”进行求散列,而不是对&#8217;123&#8242;求散列.</p>
<pre class="brush: bash; title: ; notranslate">
$ echo '123' | md5sum
ba1f2511fc30423bdbb183fe33f3dd0f
</pre>
<p>正确的写法应该是通过echo的&#8217;-n&#8217;选项,让echo不要输出换行符,这样结果就一样了.</p>
<pre class="brush: bash; title: ; notranslate">
$ echo -n '123' | md5sum
202cb962ac59075b964b07152d234b70
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.leonzhang.com/2011/10/23/php-md5-vs-linux-md5sum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php json_encode函数不支持BIGINT的问题</title>
		<link>http://www.leonzhang.com/2011/08/05/php-json_encode_bigint_problem/</link>
		<comments>http://www.leonzhang.com/2011/08/05/php-json_encode_bigint_problem/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 08:22:16 +0000</pubDate>
		<dc:creator>leon</dc:creator>
				<category><![CDATA[微博 microblog]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[微博]]></category>

		<guid isPermaLink="false">http://www.leonzhang.com/?p=777</guid>
		<description><![CDATA[前几天看到新浪微博的微博平台微博id升级公告,也没怎么注意.感觉就是存储上要用string代替int,浪费点空间.对php应用应该没什么影响. 倒是新浪微博的32位id这么快就不够用了,让人感叹微博发展的神速. 今天搜索一些关键字,打开微博页面时,老是报告页面找不到.才发现,这玩意还真有影响. 那些打不开的页面的URL是这样的”http://api.t.sina.com.cn/1941569665/statuses/3.3430536723516E+15&#8243;. Google上查了一下,发现是php的json_decode函数不支持62位的BIGINT, 溢出所致. 在新的php(5.4?) json_decode里倒是有一个开关”JSON_BIGINT_AS_STRING”开关,可以使json_decode默认把BITINT当成string处理. 但是相信大家和我一样,更新php的版本的速度不会有那么快.而且大部分情况下,咱们也控制不了具体使用哪个php版本. 一个折中的办法是把微博API返回的json字符串预处理一下,然后再调用json_decode. 也就是把 “id”:12345678901234567890 换成 “id”:”12345678901234567890&#8243; 代码片段如下,希望对和我类似情况的人有用. 参考: http://drupal.org/node/985544]]></description>
			<content:encoded><![CDATA[<p>前几天看到新浪微博的<a href="http://forum.open.weibo.com/read.php?tid=7990&#038;page=1">微博平台微博id升级公告</a>,也没怎么注意.感觉就是存储上要用string代替int,浪费点空间.对php应用应该没什么影响.<br />
倒是新浪微博的32位id这么快就不够用了,让人感叹微博发展的神速.</p>
<p>今天搜索一些关键字,打开微博页面时,老是报告页面找不到.才发现,这玩意还真有影响.<br />
那些打不开的页面的URL是这样的”http://api.t.sina.com.cn/1941569665/statuses/3.3430536723516E+15&#8243;.<br />
Google上查了一下,发现是php的json_decode函数不支持62位的BIGINT, 溢出所致.<br />
在新的php(5.4?) json_decode里倒是有一个开关”JSON_BIGINT_AS_STRING”开关,可以使json_decode默认把BITINT当成string处理.<br />
但是相信大家和我一样,更新php的版本的速度不会有那么快.而且大部分情况下,咱们也控制不了具体使用哪个php版本.</p>
<p>一个折中的办法是把微博API返回的json字符串预处理一下,然后再调用json_decode.<br />
也就是把<br />
“id”:12345678901234567890<br />
换成<br />
“id”:”12345678901234567890&#8243;</p>
<p>代码片段如下,希望对和我类似情况的人有用.</p>
<pre class="brush: php; title: ; notranslate">
if (define('JSON_BIGINT_AS_STRING')) {
	$json = json_decode($data, false, 512, JSON_BIGINT_AS_STRING);
}else{
	//convert bigint to string
	$data = preg_replace('/&quot;id&quot;:([0-9]+)/', '&quot;id&quot;:&quot;$1&quot;', $data);
	$json = json_decode($data, false);
}
</pre>
<p>参考: http://drupal.org/node/985544</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leonzhang.com/2011/08/05/php-json_encode_bigint_problem/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP扩展 memcache vs. memcached</title>
		<link>http://www.leonzhang.com/2011/06/24/memcached-vs-php-memcache/</link>
		<comments>http://www.leonzhang.com/2011/06/24/memcached-vs-php-memcache/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 15:09:08 +0000</pubDate>
		<dc:creator>leon</dc:creator>
				<category><![CDATA[软件开发]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.leonzhang.com/?p=773</guid>
		<description><![CDATA[两个扩展的介绍基本一样(memcache, memcached),没有任何特别关于他们之间区别的说明. 那我们什么时候应该用哪个扩展呢? Stackoverflow上有比较详细的讨论: using memcache vs memcached with php 和memcache vs memcached 这里还有一个很清晰表格,对比了这两个扩展的具体特性. 主要区别是php memcached扩展比较新,几乎支持memcached的所有特性(如Delayed Get, Append/Prepend等). 但是它依赖libmemcached才能运行(在debian里面包名是libMemcached5). 所以如果你不使用如Delayed Get这样的特性,又不想多依赖libmemcached库, 完全可以使用memcache扩展. 反之请选择memcached扩展. 不过debian和ubuntu上直接用apt-get install php5-memcached安装的php memcached扩展,libmemcached库有些问题. 很多人报告不能正常使用. memcache扩展由于不依赖libmemcached库,没这个问题. 我的debian 6上也有这个毛病. 必须手工编译libmemcached才行, 命令如下. 然后在/etc/php5/apache2/conf.d/memcached.ini里开启php memcached扩展. 重启apache, 应该就ok了. 你可以用这段php片段测试一下]]></description>
			<content:encoded><![CDATA[<p>两个扩展的介绍基本一样(<a href="http://cn.php.net/manual/en/intro.memcache.php">memcache</a>, <a href="http://www.php.net/manual/en/intro.memcached.php">memcached</a>),没有任何特别关于他们之间区别的说明. 那我们什么时候应该用哪个扩展呢?</p>
<p>Stackoverflow上有比较详细的讨论: <a href="http://stackoverflow.com/questions/1442411/using-memcache-vs-memcached-with-php">using memcache vs memcached with php</a> 和<a href="http://stackoverflow.com/questions/1825256/memcache-vs-memcached">memcache vs memcached</a></p>
<p>这里还有一个很清晰表格,<a href="http://code.google.com/p/memcached/wiki/PHPClientComparison">对比</a>了这两个扩展的具体特性.<br />
主要区别是php memcached扩展比较新,几乎支持memcached的所有特性(如Delayed Get, Append/Prepend等). 但是它依赖<a href="http://tangent.org/552/libmemcached.html">libmemcached</a>才能运行(在debian里面包名是libMemcached5).<br />
所以如果你不使用如Delayed Get这样的特性,又不想多依赖<a href="http://tangent.org/552/libmemcached.html">libmemcached</a>库, 完全可以使用memcache扩展. 反之请选择memcached扩展.</p>
<p>不过debian和ubuntu上直接用apt-get install php5-memcached安装的php memcached扩展,<a href="http://tangent.org/552/libmemcached.html">libmemcached</a>库有些问题. 很多人报告不能正常使用. memcache扩展由于不依赖<a href="http://tangent.org/552/libmemcached.html">libmemcached</a>库,没这个问题.<br />
我的debian 6上也有这个毛病. 必须手工编译libmemcached才行, 命令如下.</p>
<pre class="brush: bash; title: ; notranslate">
apt-get remove php5-memcached

wget http://launchpad.net/libmemcached/1.0/0.50/+download/libmemcached-0.50.tar.gz
tar -zxvf libmemcached-0.50.tar.gz
cd libmemcached-0.50
./configure
make
make test
make install
cd ..

wget http://pecl.php.net/get/memcached-1.0.2.tgz
tar -xzvf memcached-1.0.2.tgz
cd memcached-1.0.2
phpize
./configure
make
make install
</pre>
<p>然后在/etc/php5/apache2/conf.d/memcached.ini里开启php memcached扩展.<br />
重启apache, 应该就ok了.</p>
<p>你可以用这段php片段测试一下</p>
<pre class="brush: php; title: ; notranslate">
$m = new Memcached();
var_dump($m);
echo $m-&gt;addServer('localhost', 11211);

echo $m-&gt;set('int', 99);
echo $m-&gt;set('string', 'a simple string');
echo $m-&gt;set('array', array(11, 12));
/* expire 'object' key in 5 minutes */
echo $m-&gt;set('object', new stdclass, time() + 300);

var_dump($m-&gt;get('int'));
var_dump($m-&gt;get('string'));
var_dump($m-&gt;get('array'));
var_dump($m-&gt;get('object'));
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.leonzhang.com/2011/06/24/memcached-vs-php-memcache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>joomla编辑theme时导致文件权限变成不可写的问题</title>
		<link>http://www.leonzhang.com/2011/03/30/why_joomla_make_file_unwritable/</link>
		<comments>http://www.leonzhang.com/2011/03/30/why_joomla_make_file_unwritable/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 16:03:49 +0000</pubDate>
		<dc:creator>leon</dc:creator>
				<category><![CDATA[软件开发]]></category>
		<category><![CDATA[Joomla]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.leonzhang.com/?p=726</guid>
		<description><![CDATA[最近我编辑joomla的Gantry theme的时候，经常碰到css等文件，保存以后变成不可写“unwritable”的情况。 把这些文件的权限改成755，通过joomla一编辑保存，又变成555了。 在网上Google了一下，发现碰到这个问题的人还真不少。 比如这里和这里,都用一堆人说这事。Gantry theme的用户也说这事。 开始我以为是apache或者php什么地方的配置有问题。但是写了个简单的php脚本，跑了一下发现没这个问题，创建出来的文件的权限很正常。 直到看到这篇文章，才发现这是个老问题，从2006就有人不停的在抱怨了。 起因就是在joomla的模板组件的controller文件administrator/components/com_templates/controller.php里有这么几行代码： 我也没看明白，没什么不使用ftp就要把文件权限改成555？自己改成不可写，然后再告诉用户”那个文件不可写”，还不说问什么。 当然像我这样不求甚解的人很多，这几行代码就被广泛的粘贴复制了。比如本文开头提到的Gantry theme。 更加好笑的是，joomla的team在不断发布新版本。在最近发布的joomla 1.6.1里，似乎处于安全性考虑，之前设置文件权限为755的地方都改成了644。而这几行代码也顺理成章的从555变种成了444。 现在这个问题的解决办法，就是把555换成755，或者444改成644。至于什么时候joomla官方能给出个正解，就不知道了。]]></description>
			<content:encoded><![CDATA[<p>最近我编辑joomla的<a href="http://www.gantry-framework.org/">Gantry theme</a>的时候，经常碰到css等文件，保存以后变成不可写“unwritable”的情况。<br />
把这些文件的权限改成755，通过joomla一编辑保存，又变成555了。</p>
<p>在网上Google了一下，发现碰到这个问题的人还真不少。<br />
比如<a href="http://s2.howna.com/cms/joomla-params-ini-is-unwritable.html">这里</a>和<a href="http://s2.howna.com/cms/joomla-unwritable-css-file.html">这里</a>,都用一堆人说这事。<a href="http://www.gantry-framework.org/">Gantry theme</a>的用户也说<a href="http://forum.joomla.org/viewtopic.php?p=2447198">这事</a>。</p>
<p>开始我以为是apache或者php什么地方的配置有问题。但是写了个简单的php脚本，跑了一下发现没这个问题，创建出来的文件的权限很正常。</p>
<p>直到看到<a href="http://forum.joomla.org/viewtopic.php?t=30796">这篇文章</a>，才发现这是个老问题，从2006就有人不停的在抱怨了。</p>
<p>起因就是在joomla的模板组件的controller文件administrator/components/com_templates/controller.php里有这么几行代码：</p>
<pre class="brush: php; title: ; notranslate">
// Try to make the template file unwriteable
if (!$ftp['enabled'] &amp;&amp; !JPath::setPermissions($file, '0555')) {
	JError::raiseNotice('SOME_ERROR_CODE', JText::_('Could not make the template file unwritable'));
}
</pre>
<p>我也没看明白，没什么不使用ftp就要把文件权限改成555？自己改成不可写，然后再告诉用户”那个文件不可写”，还不说问什么。</p>
<p>当然像我这样不求甚解的人很多，这几行代码就被广泛的粘贴复制了。比如本文开头提到的<a href="http://www.gantry-framework.org/">Gantry theme</a>。</p>
<p>更加好笑的是，joomla的team在不断发布新版本。在最近发布的joomla 1.6.1里，似乎处于安全性考虑，之前设置文件权限为755的地方都改成了644。而这几行代码也顺理成章的从555变种成了444。</p>
<pre class="brush: php; title: ; notranslate">
//administrator/components/com_templates/models/source.php
// Try to make the template file unwriteable.
if (!$ftp['enabled'] &amp;&amp; JPath::isOwner($filePath) &amp;&amp; !JPath::setPermissions($filePath, '0444')) {
	$this-&gt;setError(JText::_('COM_TEMPLATES_ERROR_SOURCE_FILE_NOT_UNWRITABLE'));
	return false;
} else if (!$return) {
	$this-&gt;setError(JText::sprintf('COM_TEMPLATES_ERROR_FAILED_TO_SAVE_FILENAME', $fileName));
	return false;
	}
</pre>
<p>现在这个问题的解决办法，就是把555换成755，或者444改成644。至于什么时候joomla官方能给出个正解，就不知道了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leonzhang.com/2011/03/30/why_joomla_make_file_unwritable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zen Coding，快速输入html和css之道</title>
		<link>http://www.leonzhang.com/2010/02/08/zencoding/</link>
		<comments>http://www.leonzhang.com/2010/02/08/zencoding/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 08:15:05 +0000</pubDate>
		<dc:creator>leon</dc:creator>
				<category><![CDATA[软件开发]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[pdt]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[zen-coding]]></category>

		<guid isPermaLink="false">http://www.leonzhang.com/?p=458</guid>
		<description><![CDATA[整理Eclipse for php的时候，无意间看到了这工具，Zen Coding。真是快速编辑html和css的利器，有多厉害，看看这里的演示吧。访问不到的请移步土豆。 作者的主要想法是，通过把编辑器变成一个简单的脚步解释环境，来提高编码的效率。我想这也是VIM这种编辑器反而比一些的IDE效率更高的主要原因。不过Zen Coding的想法更新颖，代码更少。 例如我们要输入这样一段html代码， 以zen coding的方式，就只需要输入“div#header>ul.navigation>li*4>a”，然后按快捷键展开就好了。 心动了，来体验一下zen coding的魅力吧。这个在线的Zen Coding编辑器，是通过js，把普通的html textarea变成了不错的IDE。如何让你网站上的textarea也支持这个功能？试试这个吧。 我常用的代码编辑器是VIM和Eclispe，来看看怎么使它们支持Zen Coding吧。 首先来看看VIM VIM下支持Zen Coding相对比较容易 首先确保你的VIM版本支持python的。我使用的是Debian/squeeze下的vim-nox包，squeeze下支持python的VIM包。 然后下载这两个VIM插件，zencoding.vim和zencoding_vim.py，拷贝到VIM的.vim/plugin目录中。 再从这里，下载Zen Coding for TextMate v0.3.1.zip，把压缩包里的zencoding整个目录拷贝到.vim/plugin下。注意是目录。 OK，现在可以打开VIM试试了。进入插入模式输入“div#header>ul.navigation>li*4>a”，然后按“Ctrl+E”，看看有什么效果，呵呵。 VIM下的Zen Coding的快捷键设置如下： 插入模式下Ctrl+L ：插入缩略代码 可视模式下Ctrl+L ：在选中的文本前后，重复插入缩略代码 插入模式下Ctrl+E：直接在当前编辑位置，运行并插入生产的代码 插入模式下Tab：同Ctrl+E 再说说Eclipse Eclipse下支持Zen Coding实际上是通过js做的。就像在Firefox里有Greasemonkey这样的扩展是用户可以通过js来扩充Firefox；Eclipse下也有个类似的叫Eclipse Monkey的项目。 首先在Eclipse里添加这个更新站点http://download.eclipse.org/technology/dash/update，更新、安装Eclipse Monkey。 然后看这个演示，就知道怎么在项目里加入zen coding的js文件，来扩展Eclipse了。 Zen Coding现在是一个比较新的项目，有兴趣的可以多关心Zen Coding在Google code上的项目。 参考文档： http://code.google.com/p/zen-coding/issues/detail?id=16 http://code.google.com/p/zen-coding/wiki/AptanaHowToEn]]></description>
			<content:encoded><![CDATA[<p>整理<a href="http://www.eclipse.org/pdt/">Eclipse for php</a>的时候，无意间看到了这工具，<a href="http://code.google.com/p/zen-coding/">Zen Coding</a>。真是快速编辑html和css的利器，有多厉害，看看这里的<a href="http://vimeo.com/7405114">演示</a>吧。访问不到的请移步<a href="http://www.tudou.com/programs/view/z7wjoN2E8Cg/">土豆</a>。</p>
<p>作者的主要想法是，通过把编辑器变成一个简单的脚步解释环境，来提高编码的效率。我想这也是VIM这种编辑器反而比一些的IDE效率更高的主要原因。不过Zen Coding的想法更新颖，代码更少。<br />
例如我们要输入这样一段html代码，</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=”header”&gt;
    &lt;ul class=”navigation”&gt;
        &lt;li&gt;&lt;a href=”&quot;&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=”&quot;&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=”&quot;&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=”&quot;&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/div&gt;
</pre>
<p> 以zen coding的方式，就只需要输入“div#header>ul.navigation>li*4>a”，然后按快捷键展开就好了。</p>
<p>心动了，来体验一下zen coding的魅力吧。这个<a href="http://www.cdolivet.com/editarea/editarea/exemples/exemple_full.html">在线的Zen Coding编辑器</a>，是通过js，把普通的html textarea变成了不错的IDE。如何让你网站上的textarea也支持这个功能？试试<a href="http://www.cdolivet.com/index.php?page=editArea">这个</a>吧。</p>
<p>我常用的代码编辑器是VIM和Eclispe，来看看怎么使它们支持Zen Coding吧。</p>
<h3>首先来看看VIM</h3>
<p>VIM下支持Zen Coding相对比较容易</p>
<ul>
<li>首先确保你的VIM版本支持python的。我使用的是Debian/squeeze下的vim-nox包，squeeze下<a href="http://packages.debian.org/squeeze/vim-python">支持python的VIM包</a>。</li>
<li>然后下载这两个VIM插件，<a href="http://zen-coding.googlecode.com/issues/attachment?aid=-2227862969360034964&#038;name=zencoding.vim">zencoding.vim</a>和<a href="http://zen-coding.googlecode.com/issues/attachment?aid=9155111667227577437&#038;name=zencoding_vim.py">zencoding_vim.py</a>，拷贝到VIM的.vim/plugin目录中。</li>
<li>再从<a href="http://code.google.com/p/zen-coding/downloads/list">这里</a>，下载Zen Coding for TextMate v0.3.1.zip，把压缩包里的zencoding整个目录拷贝到.vim/plugin下。注意是目录。</li>
</ul>
<p>OK，现在可以打开VIM试试了。进入插入模式输入“div#header>ul.navigation>li*4>a”，然后按“Ctrl+E”，看看有什么效果，呵呵。<br />
VIM下的Zen Coding的快捷键设置如下：</p>
<blockquote><p>
插入模式下Ctrl+L ：插入缩略代码<br />
可视模式下Ctrl+L ：在选中的文本前后，重复插入缩略代码<br />
插入模式下Ctrl+E：直接在当前编辑位置，运行并插入生产的代码<br />
插入模式下Tab：同Ctrl+E
</p></blockquote>
<h3>再说说Eclipse</h3>
<p>Eclipse下支持Zen Coding实际上是通过js做的。就像在Firefox里有<a href="https://addons.mozilla.org/en-US/firefox/addon/748?src=api">Greasemonkey</a>这样的扩展是用户可以通过js来扩充Firefox；Eclipse下也有个类似的叫<a href="http://wiki.eclipse.org/Eclipse_Monkey">Eclipse Monkey</a>的项目。</p>
<ul>
<li>首先在Eclipse里添加这个更新站点http://download.eclipse.org/technology/dash/update，更新、安装Eclipse Monkey。</li>
<li>然后看<a href="http://gonzalezmora.com/publications/screencasts/ZenCoding/ZenCoding.html">这个演示</a>，就知道怎么在项目里加入zen coding的js文件，来扩展Eclipse了。</li>
</ul>
<p><img src="http://zen-coding.googlecode.com/svn/wiki/images/aptana-proj-structure.png" alt="zen coding in Eclipse" /></p>
<p>Zen Coding现在是一个比较新的项目，有兴趣的可以多关心<a href="http://code.google.com/p/zen-coding/">Zen Coding在Google code上的项目</a>。</p>
<p>参考文档：</p>
<ul>
<li>http://code.google.com/p/zen-coding/issues/detail?id=16</li>
<li>http://code.google.com/p/zen-coding/wiki/AptanaHowToEn</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.leonzhang.com/2010/02/08/zencoding/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: basic
Database Caching 1/32 queries in 0.023 seconds using disk: basic
Object Caching 535/600 objects using disk: basic
Content Delivery Network via N/A

Served from: www.leonzhang.com @ 2012-02-10 17:13:55 -->
