默认情况下,dokuwiki需要把中文文件进行编码后存储,便会在data文件夹下存在好多形如%ED%类的文件名,不利用管理和SEO,如果你想改变这些,首先要更改dokuwiki对中文文件的存储方式,然后将以前的文件编码重新转换为正常的中文文件名。 第一步可参考上一篇文章http://klniu.com/post/dokuwiki-chinese-file-name-and-address-sitemap-garbled/更改。 而第二步就需要批量处理了,此方法适用于linux系统。我使用的是ubuntu,请大家参考执行: 安装uni2ascii工具: sudo apt-get install uni2ascii 编写脚本: #!/bin/sh times=5 itimes=0 while [ "$itimes" -lt "$times" ] do for oldfile in `find $1 -name “*”` do newfile=`echo $oldfile|ascii2uni -aJ -q` mv -n -v “$oldfile” “$newfile” done itimes=$(($itimes+1)) done 脚本的原理是,遍历目录并转换文件名,然后再将乱码的文件重命名为转换后的文件名。 因为我shell学得不好,所以有一个问题没有解决–在脚本执行过程中,如果目录已经被更改,脚本继续执行的时候被更改过名字的目录下的文件会无法定位,所以此脚本需要多执行几次,具体次数要视最大目录层数决定,脚本默认5次,如果你目录较多,可以更改times=数字,来决定脚本执行次数。这是一个小问题,脚本并不会损坏文件,只是多执行几次,请放心使用。 脚本编写完成后,执行: sh 脚本名字 被执行的目录 #例如 sh asciiconv.sh /home/username/dokuwiki/data
dokuwiki默认是使用urlencode函数对文件名进行编码后存储的,而索引文章的indexer.php文件在生成sitemap.xml时也会对文件名编码,这样对搜索引擎是不友好的,实际上将这两个编码的功能去掉就可以了。 中文文件名的乱码可以参考http://www.dokuwiki.org/zh:pagename进行更改,即: function utf8_encodeFN($file, $safe = true) { if ($safe && preg_match(’#^[a-zA-Z0-9/_\-.%]+$#’, $file)) { return $file; } /* 把这个部分注释掉 $file = urlencode($file); $file = str_replace(‘%2F’,'/’,$file); */ return $file; } } if (!function_exists(’utf8_decodeFN’)) { /** * URL-Decode a filename * * This is just a wrapper around urldecode * * @author Andreas Gohr <andi@splitbrain.org> * @see
more…
收集-阅读-加工-输出知识是一个很有意思和实用的过程,在这个过程中我用过很多知识管理软件。 最早用的是onenote,功能确实强大,不过有点大,携带不方便,平台依赖性太强。 后来有一段时间用Gmail+Folders4Gmail脚本+Gmail过滤器功能,用了好长时间,搜索强,携带也方便,唯一不适合的地方就是发出的邮件是不能编辑的,如果需要修改,则必须重新发送,比较麻烦。 然后在善用佳软看到了pkmanager2,就用了一段时间,绿色,强大。再后来就是wizknowledge,新出的知识管理软件,设计挺不错,发展应该很有前途,不过上面两个也都有跨平台和携带的问题。 以上的方法和软件都是很不错的,但本人因为经常需要转换地方,希望能一个便携、搜索强大、可编辑性强、跨平台、规范的知识管理程序,最后找到了wiki,应该是能够满足我的需求,而常用的mediawiki太大,对个人来说有点大材小用,而且有些东西是不能公开的,就需要一个权限控制能力强的的wiki了,最后就选中dokuwiki了,使用了七八天了,感觉挺不错,资料随处带,挺好。 dokuwiki的官网是http://www.dokuwiki.org/,是一个不用数据库的wiki程序,插件挺多也很实用,可自定义主题,最有用的indexmenu插件可以在侧边栏放上目录,方便查找。支持标题和全文搜索,对中文支持也很友好。ACL可以设置不同命名空间(类似分类的文件夹)和页面不同用户的权限,非常适合多人协作。 本站的新知识管理地址:http://wiki.klniu.com/