revive

revive 是一个雅思词汇

∵ re- 是往回、再次,-vive 是活着

∴ revive = 又活过来了

博客搬家到sae(新浪云计算平台http://sae.sina.com.cn)成功,顺便通知 @懒旸旸,12月这主机到期我就不续费了,你的二级域名也要报销了,推荐你也搬家到sae吧,平台上有wp一键安装。

注册点这里:http://sae.sina.com.cn/activity/invite/3061/weibo

搬家过程如下:

1. 到应用商店安装Typecho4SAE,http://sae.sina.com.cn/?m=recommendapps

2. 把数据从sablog-x 2.0转换到typecho,这里用了Hjin.meSablog2ToTypecho插件,当然他这个不完全能用,有些数据格式不一样,自己修改了一下

3. 把附件上传到sae的storage里,并写程序批量把附件的引用url改成storage的地址

4. 绑定域名,新浪的效率还蛮高的,发信过去,10分钟之内就给绑定好了

2011.11.1,一切都是新的。

我打算把博客搬到sae上面去

虚拟主机太不靠谱了,三天两头要出事,这点破流量sae的免费云豆应该足够支撑了吧,于是主机费也省了。

被垃圾评论搞烦了,封ip都不行,sablog的反垃圾能力又太弱了,所以干脆把评论关闭了。想换到typecho去试试,刚好发现sae上有typecho,加个akismet插件应该就完美了吧。

话说其实转换已经差不多了,只是好多文章里的附件链接以及iframe挂掉了,没时间搞,慢慢搞吧。

有一个big plan,这个要花好多时间。

为了这个big plan,我还要赚到足够的钱,这个要花更多的时间。

忽然间好希望我才是18岁的小伙子,还有大把的光阴可以去挥霍。

总之,老子要搞一票大的。

sablog标签自动内链的问题

sablog-x 2.0提供了自动为tag标签添加链接的功能,这个函数在include\func\front.func.php中

function highlight_tag($content, $tag) {
	global $options;
	$tag = trim($tag);
	if(preg_match('/<a[^>]+?'.preg_quote($tag).'[^>]+?>/i',$content)) return $content;
	if(preg_match('/<img[^>]+?'.preg_quote($tag).'[^>]+?>/i',$content)) return $content;

	//有次数的替换
	$content = preg_replace('/'.$tag.'/i','<a href="'.gettaglink(urlencode($tag)).'" onclick="tagshow(\''.$tag.'\');return false;">'.htmlspecialchars($tag).'</a>', $content, 1);
	/*
	替换所有
	if(function_exists('eregi_replace')) {	
		$content = eregi_replace($tag, '<a href="'.$tagurl.'" onclick="tagshow(\''.$tag.'\');return false;" class="tagshow">'.htmlspecialchars($tag).'</a>', $content);	
	} else {
		$content = str_replace($tag, '<a href="'.$tagurl.'" onclick="tagshow(\''.$tag.'\');return false;" class="tagshow">'.htmlspecialchars($tag).'</a>', $content);	
	}
	*/
	return $content;
}

这个函数其实是有问题的,<a></a>标签对之间出现tag标签时,仍然会替换成超链接。

比如,我一篇文章有一个标签是"tag",而我的文章中同时有一个超链接<a href="www.lurenfake.com/taglist/">this is a tag</a>,它最终会被转换成<a href="www.lurenfake.com/taglist/">this is a <a href="www.luranfke.com/tag/tag/">tag</a></a>,这样就出现了两个超链接嵌套的情况,显示结果会很奇怪。

对寻找链接的正则表达式进行了修改,同时加上了对<pre>标签的过滤,这样代码中的关键字也不会被替换了,修改后的代码如下

function highlight_tag($content, $tag) {
	global $options;
	$tag = trim($tag);
	if(preg_match('/<pre.+?'.preg_quote($tag).'.+?<\/pre>/i',$content)) return $content;
	if(preg_match('/<a.+?'.preg_quote($tag).'.+?<\/a>/i',$content)) return $content;
	if(preg_match('/<img.+?'.preg_quote($tag).'.+?>/i',$content)) return $content;

	//有次数的替换
	$content = preg_replace('/'.$tag.'/i','<a style="color:#ff6055" href="'.gettaglink($tag).'" onclick="tagshow(\''.$tag.'\');return false;">'.htmlspecialchars($tag).'</a>', $content, 1);
	
	return $content;
}

修复CKeditor-SyntaxHighlighter插件的一处bug

大概在一个月以前,我为大家介绍了一款让CKeditor支持SyntaxHighlighter的一款插件,我也一直在用这款插件来贴代码。后来小A发布了CKeditor 3.1精简版里面已经附带了代码高亮的插件,但是比较简陋,没有高级设置选项,所以我还是替换成了之前的这个插件。

今天白建鹏先生告诉我说发现了一个bug,插入代码以后再修改的话,空格和缩进会变成&nbsp;,源代码被破坏了。查看了插件源码,发现原来是插入代码到编辑器中的时候调用了CKeditor.element.setText()方法,这个方法会把前置的空白字符替换成&nbsp;,于是想到改用CKeditor.element.setHtml(),但是发现这样会丢失换行信息,而且制表符也会被替换成空格,问题更大。

找不到办法从根源上解决问题,只能在读出代码的时候把&nbsp;转义回空格,这样的后果是会丢失缩进信息,制表符也变成了空格,治标不治本。

发个更新包,也算是解决了问题,但是不完美。若有高手路过,还望指教。。。

2010-02-27 已经找到解决办法,请到这里下载更新版本

让sablog也能缓存gravatar头像

据说gravatar的头像有时候会加载比较慢噢,这个问题虽然我没有遇到过,但是为了照顾到网络不好的朋友们,我还是决定把我的博客头像也缓存一下,嘿嘿。

发现WordPress的朋友们早就纷纷研究过啦,看到了号称全世界最小的gravatar缓存程序,修改了一下,给弄到咱的sablog里啦。不知道Willin大师为啥要用那么难懂的变量名呢。。。

修改步骤如下:

打开include/func/global.func.php,找到get_avatar()函数,直接替换成下面这个

function get_avatar($email, $size = 0) {
	global $options;
	if (!$options['show_avatar']) {
		$avatardb = array();
	} else {
		if (!$size) {
			if (!$options['avatar_size'] || !is_numeric($options['avatar_size'])) {
				$size = '36';
			} else {
				$size = $options['avatar_size'];
			}
		}

		$default = $options['url'].'avatar_cache/default.jpg';
		$file_name = md5(strtolower($email));
		if ($email) {
			$avatar = SABLOG_ROOT.'avatar_cache/'.$file_name.'.jpg';
			$update = 1209600; //14 days
			if (!is_file($avatar) || (time() - filemtime($avatar)) > $update) {
				$src = 'http://www.gravatar.com/avatar/'.$file_name;
				$src .= '?s='.$size;
				$src .= '&d='.urlencode($default);
				if ($options['avatar_level']) {
				$src .= '&r='.$options['avatar_level'];
				}
				copy($src, $avatar);
			} else {
				$src = $options['url'].'avatar_cache/'.$file_name.'.jpg';
			}
			if (filesize($avatar) < 500) {
				copy($default, $avatar);
			}
		} else {
			$src = $default;
		}
		
		$avatardb = array(
		   'size' => $size,
		   'src' => $src
		);
	}
	return $avatardb;
}

然后在博客根目录下建个avatar_cache文件夹用来缓存图片,收工~