WordPress无法发布中文日志解决办法

  前几天博客突然无法发布中文日志,殚精竭虑想不出来哪里出错,很是困扰。
  写信给国内甚至台湾我认为比较出色的WordPress博客站长求助,仍找不到问题所在。许多站长建议我升级到WordPress最新版本2.7.1。在本地测试我的K2_WalltzLee主题(修改自K2 RC6)与WordPress2.7.1的兼容性时,发现会出现许多样式上的错位,再加上我改动过现在正在使用的WordPress版本的源码,真要折腾升级的话估计没个十天半个月弄不好。幸好我没有傻乎乎地直接在虚拟主机上升级,不然就完蛋了,有备份也没用,根本回不到原来的样子,还要面对几千行的代码从头改。现在想起后怕得头皮一阵发麻。天塌下来只有你一个人被砸死,别人都好好的,也许这就是独立站点最大的痛苦和最大的快乐所在吧。
  另外我不喜欢2.7.1的后台界面,一键升级功能对我这种改源码的用户没有任何意义,2.7.1版本发布时,WordPress老大Matt还给我发了封邮件,说你们这帮不升级的家伙是不是住在岩石下面啊,快快升级到2.7.1吧,这是我们一顿折腾后最完美的作品了!唉,你这么说的话就拜托以后别再升级了。对WordPress的频频升级我真感到不能理解。
  

症状
  1.可以发布英文日志。但只要标题或正文中含有中文,就会发布出错,主机CPU占用100%并出现超时提示:
  Fatal error: Maximum execution time of 30 seconds exceeded in/…/wp-includes/post.php on line 1287
  并且每次报错的具体文件和行数都不相同,有时会报错在一些并不存在的行数。
  2.与主机php的超时设定无关,按网上的方法修改php.ini把超时设定成多久都没用。
  3.日志会存为草稿,编辑草稿再发布也不行,但在可以修改并保存草稿。
  4.与插件和主题无关,停用所有插件,换回默认主题,问题仍然存在。
  5.与虚拟主机的PHP/MySQL软件版本无关。
  6.之前已经发布的中文日志可以编辑添加中文并保存。可以通过先发布英文日志、再把英文日志修改成中文日志的方法发布中文日志(苍天啊,我前两篇日志就是这么发布的)。
  

解决
  在论坛上我搜索到其他的朋友也碰到过这个问题,但不知如何解决。这其实是一个只存在于WordPress2.5.1的BUG,在2008年5月已经有人向WordPress提交了这个BUG的报告:some post text (persian) causes timeout on publish (not save)(某些包含波斯语的文本在发布时会导致超时错误)。中文和波斯语是一个德性,哈哈。
  官方已给出修正方法,详见这里,在wp-includes/post.php第1289行,用绿色部分的代码替换掉红色部分的代码。
  

感谢
  问题能解决,必须感谢yskin的帮助,在我求助的六个看上去都很牛的站长中,只有他给出了可以绕过BUG的办法,鹤立牛群。从yskin的解释中能深刻感觉到他对WordPress的熟悉程度远胜别人一筹,有实力的人就是不一样。在我找到解决方案后,yskin还耐心地对我刨根问底的追问给出了自己的解答:

  从PHP的角度来讲,这两段代码应该是一样的,原来的代码使用的是双引号内直接使用$变量,后者是用类似C语言的printf函数的方式,在需要使用变量的地方用%s代替,然后后面跟上变量。
  原则上PHP对两种方式的处理应该是一样的,并且都可以保证正确。后面这段代码把$alt_post_name和$post_type单独作为$wpdb->prepare()函数的参数,而该函数里有:array_walk($args, array(&$this, ‘escape_by_ref’)); 这样一段代码对所有参数做一个处理,所以估计是这里有bug导致中文录入的出错。

  对比起其它寥寥数语的回复,yskin上千字的邮件让人感动,从邮件的条理性、针对性、严谨性我看到了一个认真、缜密、踏实、助人为乐的人,他教会我的不仅仅是WordPress里几个PHP语句。

K2主题页面相关问题解析及一些零碎

  我在修改K2主题时的一些体会,写出来也许对碰到类似问题的朋友有些帮助。主要是关于header里页面的问题,还有一些零碎的事项,写下来也算是一个修改工作的备忘录吧。
  

页面相关文件位置
  “页面”在K2主题里用header下的menu字段定义。其中:
  PHP输出控制在
  app\includes\display.php 25-48行 函数function k2_header_menu()
  CSS样式控制在
  css\core.css.php中”Main Menu in Header”注释下
  

隐藏页面的方法
  网上已经有如何隐藏某个页面的详细介绍,参看这里。
  

页面翻页后同时显示主页和当前页面问题的解决
   页面如果不涉及翻页是不会出现这个BUG的,但是如果页面涉及翻页,“主页”和当前页面会同时显示为选中状态,因为is_archive和is_paged判断同时为true。
  这个问题及其它类似的问题的解决,关键在于状态标签的使用。WordPress官网上有关于状态标签的详细说明,见这里。我的体会是,状态标签是非常有用的,在WordPress程序中使用频率也非常高。
  在上文提到的k2_header_menu函数中,<li></li>中的if语句就是判断哪个页面为当前页面的语句,原文的or判断太繁琐,只留下一个你需要的条件即可,其它的可以注释掉。另补充两句比较有用的判断语句:
  is_home() && !is_paged()
  is_category(’31’)
  前者已经有很多文章介绍用法。后者适用于调用了某个分类(标签、作者等等也一样)的页面。例如我的“照片”页面调用了“凝视有时”这个分类,分类序号是31(获得分类序号的方法请自行Google),用了is_category判断后“照片”页面的翻页就会显示正常了,否则从第二页开始“主页”和“照片”会同时显示为当前页面。
  

K2主题的其它注意事项
  1.K2的css文件并不符合W3C标准,因为它的style.css实际上引用了css文件夹下的core.css.php,如果你希望网站能通过W3C的CSS验证,可以把core.css.php文件改为相同名称替换掉根目录下的style.css文件,但记得把第一行注释掉:
  <?php require(‘gzip-header-css.php’); ?>
  

  2.如果你需要自己撰写新的页面模板,保存时必须存为UTF-8编码,保存为UTF-8无BOM和ANSI编码都会出现header上空行的问题,IE内核浏览器还会出现header右侧错位的问题。
  

  3.K2主题大量使用了嵌套、引用的函数和模块,使得自定义性较差。如果自己编写模板需要改变某些函数和模块,在app文件夹下可找到所有K2自己的函数和模块。
  

  4.我修改的K2主题在IE6下有一个小BUG,每篇日志的第一条评论的评论者ID背景色无填充。另外通过这一个多月的使用我发现,不同机器上的IE6和基于IE6内核的遨游浏览器对样式表的解析各有不同。IE7和Firefox表现完美。鉴于IE6这款浏览器可以把一个程序员活活整死,而我只是个门外汉,还是放下强迫症的倾向,由它去吧!

更换K2主题

  换主题就像死过一次一样,用四天时间和几千行代码搏斗。
  这次使用的主题是K2RC6,没有使用最新的版本K2RC7 是因为K2RC6和我的WordPress2.5.1兼容性最好。不打算升级到WordPress2.7,我不需要那些可能拖慢网站的功能,另外我修改过WordPress2.5.1的源代码,升级意味着要重新改一遍源代码,那是自寻烦恼。
  现在用的这个K2主题是经过修改的,本地Apache/MySQL/PHP的编程调试环境我用的是XAMPP LITE。主要改动有以下几个方面:
  最大的动作在留言系统。我个人不喜欢ajax免刷新式留言,并且K2原来的留言样式不大好看,Gravatar不与留言者名称对齐,默认Gravatar又黑又粗,看起来乱七八糟。改成默认主题的留言样式。
  K2毕竟是外国人的主题,中文表现并不理想。除了汉化这种必要步骤,还把侧边栏与主栏间距扩大了10像素,侧边栏列表项目稍微空半格,给照片加边框,图片不加边框,改大字体,适当地方字体加粗,增加header中menu列表的margin,修改引用样式,去掉所有时间、留言、标签、编辑旁的png小图标,等等。
  代码方面重新为几个页面按K2的结构做template让其能正确显示。改正页面翻页后header同时显示主页和页面的bug。
  简单概括,就是把默认主题Kubrick和K2拼起来。
  我先后用过两个主题,默认主题Kubrick和K2主题,皆出自Michael Heilemann之手,整个修改过程我对他的崇拜之情不断加深。他在Kubrick里告诉我代码能简洁到什么程度,用K2让我知道盘根错节可以和条理清晰共存,代码能如此复杂精巧,我觉得他仿佛集天真无邪的孩童和神机妙算的老千于一身,可怕而令人着迷。在Kubrick的style.css代码结尾的注释里,他写道:“Daisy给我你肯定的回答吧,爱你让我痴狂,这不会是那种老套的婚礼,我没钱给你买马车,但坐在我自行车后座上你会甜蜜悠长!”在K2的theloop.php代码开头的注释里,他写道:“对这么精美的艺术品,下手轻点!”真性情的奔放加牛逼哄哄的自信,偶像啊偶像。这个哥本哈根的30岁帅哥个人博客PR是7,太猛了太猛了,徐静蕾王小峰之流的博客在他面前简直不值一提,行走江湖最终还是要靠实力说话啊。
  程序调试让人上火。IE和Firefox两种内核的浏览器不同的显示效果让人抓狂,就像同时给笨学生和聪明学生上课,既要让笨IE听明白,又不能让聪明的Firefox觉得不耐烦。
  学习CSS最好的办法果真是不断尝试。K2的CSS文件大得惊人,仍和其它主题很好兼容,得益于字段命名的独立。K2另一个强大之处在它无所不能的对外接口和自定义选项,这对于使用者是个好事,但对于修改主题的我来说就是个灾难。作者喜欢把各段功能切成模块分开放在不同PHP文件里,再引用或嵌套,有些功能定义完全看不懂还不知到哪找出处,幸好最后都弄明白了。
  这次修改WordPress主题,最大的体会是:能用CSS解决问题的地方尽量用CSS,能用PHP代码解决问题的地方尽量用PHP代码。下手之前最好想好用哪种方法,弄反了效率会很低而且很难做出来。另一个体会是DIV加CSS的网页组织方式高效而科学,在这点上我不认同自恋的腾讯网站重构工程师TwinsenLiang的观点。
  用BSP的人点几下就能换个主题,WordPress也不难顶多稍微调试一下,无奈吹毛求疵乃我人生一大悲哀,硬要自作孽,看教程查手册改样式表,半夜两眼放光读代码。一切痛苦只能怪自己太菜,上次完全不懂CSS也敢修改默认主题,真勇敢。但付出就有进步,我觉得以后写简历也许可以加一句“了解网页编程的PHP和CSS语言”。
  过程是艰苦的,成功的欣慰让人充实,也许这就是独立的最大乐趣吧。专心做一件事情的感觉真好。

Gmail撰写邮件时插入联系人的方法

  Gmail撰写信邮件时,无法像其它邮箱一样方便地从通讯录中选取并插入联系人的邮件地址,这是个被广为诟病的缺点。关于这个问题,Gmail官方给出的答案是“目前还不支持在撰写邮件时打开通讯录列表的功能”,并建议使用自动完成功能插入联系人。但是自动完成功能仅仅对英文有效,对中文无能为力。
  如果你才刚开始使用Gmail并且注意到了这个问题,那想当然的解决办法是,把通讯录中所有人的名称用拼音表示,这样就能键入联系人姓名拼音的首字母利用自动完成插入联系人。不过如果你用Gmail已经有好些时间,或不愿意使用拼音,通讯录里的联系人都是中文名字,该如何插入联系人呢?我曾经google找不到方法就放弃了,直到昨晚安同学来问我这个问题,我鼓捣了一下弄出来了,而且还不止一种办法。
  

Gmail写信插入单个中文名字联系人方法

  1.输入联系人中文名全部或部分(任意一个字即可),并回车。示例:输入“临”并回车。

  2.输入联系人中文名全部或部分(任意一个字即可),并回格。示例:输入“临颍”并回格。

  3.输入联系人中文名全部或部分(任意一个字即可),并用左方向健(用鼠标点不行)把光标退回一格。示例:输入“临颍”并光标退回一格。

  

Gmail写信插入中文联系人组方法

  1.与插入联系人方法相同,输入联系人组名称全部或部分(任意一个字即可),并回车,或回格,或用左方向健(用鼠标点不行)把光标退回一格。示例:输入“老师”并回格。

  2.输入一个英文双引号,会自动出现所有已有联系人组供选择。示例:输入英文双引号”出现所有组供选择。

  
说明
  上述所有方法在firefox中均有效(一开始我是用firefox试验的),但在IE内核的浏览器中,只有第一条方法可用,输入名称的全部或部分并回车,不出现选择框,地址直接填好在收件人栏里。
  

总结
  无论何种浏览器,Gmail撰写新邮件插入中文联系人或联系人组,只需输入名称的全部或部分并回车。

Alexa排名前300的中国网站

  每次查看自己网站流量时旁边都会有一个Alexa排名,200万名的排名基本上属于纯正的草根了。时常看到某些站长在炫耀建站多短时间每天就能有几百甚至上千的IP,仿佛多厉害似的,殊不知他们制造的网络垃圾信息导致网民们搜索出来的东西雷同的越来约多能用的约来越少。随便搞点关键词、复制粘贴甚至采集些最新的东西、疯狂招链接,这么干谁的网站流量都会上去,我觉得他们真是些无趣的人。不过人各有志,他们大可鄙视我的排名和每天十几IP的流量。
  不写技术和热点真的很难有流量,像不许联想这种能达到每天一万五千IP恐怖流量的生活类博客简直就是神人了,所以平时看到非技术类的站都很有亲切感。我不加链接,对一些好心想换链接的朋友说声对不起了。
  突然有了个想法,看看排在Alexa前300名的中国网站都有哪些,排到前10万名的网站都是非常优秀的,前300名的网站都是一棵棵摇钱树啊!(注:网站名称前的数字为排名)
  

11.Baidu.com www.baidu.com
  一个搜索引擎起家的网站能做到中国第一,十分厉害,它的产品线不比任何一个门户网站差,新闻、博客、贴吧……应有尽有。可惜它的名称和介绍都是全英文,彻底暴露了自己是个美国公司,还有脸嗲声嗲气地说“请大家支持国产”,哈哈。
  

17.QQ.COM www.qq.com
  不得不佩服腾讯,无限齐全的增值服务(或流氓增值服务)敛财无数,最平民的用户群令任何网站望尘莫及。
  

21.新浪 www.sina.com.cn
  这种婊子网站能到这个位置,真该对每天点击它的网民磕三个响头。
  

35.Google www.google.cn
  请注意,这是Google中国也就是股沟的排名,以com结尾的Google排名是第2,而且前100名中充斥着Google印度(14名)、Google德国(15名)、Google法国(19名)、Google英国(23名)、Google巴西(27名)、Google意大利(29名)、Google西班牙(33名)、Google日本(34名)、Google墨西哥(43名)、Google链接(49名)、Google加拿大(57名)、Google土耳其(76名)、Google澳大利亚(89名)、Google波兰(92名)、Google印尼(95名),综上所述,Google是这个星球上最牛逼的网站。
  

47.淘宝网 www.taobao.com
  我觉得它是中国最牛逼的网站。
  

54.网易 www.163.com
  门户网站都一个德性,但网易没有新浪那么贱,无奈事实证明人们还是喜欢贱一点的东西。
  

55.优酷 www.youku.com
  中国第一在线视频网站,当之无愧,优酷的速度就是快,唯一不爽的是它不会把整个视频一次加载完,唉,也许这就是它快的原因吧。
  

67.Sohu.com Inc. www.sohu.com
  搜狐好样的,和百度一样彻头彻尾的英文。
  

77.雅虎中国 www.yahoo.com.cn
  以com结尾的yahoo排名第1,可惜前100只有排名第10的yahoo日本和雅虎中国了,而且雅虎中国还是马云的。雅虎真是萎了。
  

88.Soso搜搜 www.soso.com
  腾讯随便搞了个搜索引擎就排到这个位置了。
  

93.Ku6.com www.ku6.com
  这个中国第二在线视频站,管自己叫“第一视频分享门户”。
  

106.Xunlei.com www.xunlei.com
  垃圾迅雷,广告越来约多。你网站的流量都是软件带来的吧?
  

124.搜狗(SOGOU.com) www.sogou.com
  其实我只知道搜狗输入法,我还知道卑鄙的搜狗输入法是抄人家的。
  

130.Mop.com www.mop.com
  八卦真是人之本性。
  

132.土豆网 www.tudou.com
  中国起步最早的在线视频站沦落到这地步了,有时候先机并不能让你一直领先的。
  

137.和讯网 www.homeway.com.cn
  号称“中国财经网络领袖和中产阶级网络家园”,起名字真不能脸皮薄啊。
  

138.太平洋电脑网 www.pconline.com.cn
  那是一个充满了奸商和枪手的地方。
  

154.Alibaba.com www.alibaba.com
  虽然排名比淘宝靠后许多,但赚的钱可不是淘宝能比的。
  

156.中关村在线 www.zol.com.cn
  那可是一个全国电脑小工都向往的地方!
  

179.校内网 www.xiaonei.com
  中国的学生们还真不是一般的空虚寂寞!
  

199.人民网 www.people.com.cn
  这个网站居然能上榜真出乎我意料,是不是党员都上这个网站啊?“截至2007年6月,全国党员总数为7336.3万名,比2002年党的十六大时增加642.2万名,平均每年增加142.7万名,平均每年增长2.1%。全国现有党的基层组织360.7万个,比2002年党的十六大时增加14.2万个。”共产党员们,你们太强大了。
  

214.房地产门户-搜房网 www.soufun.com
  房产类第一,里面东西还是挺多的。
  

225.迅雷旗下-狗狗影视搜索 www.gougou.com
  搜视频下载一般都用这个?
  

240.六间房 www.6.cn
  在线视频真是个不错的题材,你看YouTube都排第3名了。
  

241.天涯社区 www.tianya.cn
  天涯是民间笑话智慧的宝库。我对所有抱着学习和讨论时事等严肃目的去天涯的朋友们充满了敬意。
  

252.凤凰网(凤凰新媒体) www.ifeng.com
  一个域名和名字完全没关联的网站。
  

260.中华网科技公司 www.china.com
  可惜啊,一个域名那么拉风的网站排那么后面。
  

273.PCPOP电脑时尚 www.pcpop.com
  同是80后,人家李想身家都过亿了,惭愧啊惭愧。
  

277.IT168 www.it168.com
  很明显这个地方的奸商和枪手没太平洋和中关村那么多,所以排名靠后了许多。
  

290.新华网 www.xinhuanet.com
  强大的新华社啊,无所不能穿越时空的新华社啊,你为什么排那么后面呢?
  

295.网易邮箱 www.126.com
  网易的儿子还能进前300,不错了不错了。
  

其它一些我觉得有意思排名:
8.Wikipedia www.wikipedia.org
  拜和谐的奥运会所赐,维基百科终于可以访问了,这个名次真不愧对维基百科的地位。
  

28.WordPress.com www.wordpress.com
  没想到我亲爱的博客平台程序如此生猛。原来独立博客还真不少啊。
  

38.네이버 www.naver.com
  竟然在前50名里有这个我看韩国星际职业联赛直播的网站,韩国游戏产业果然世界第一。
  

45.Youporn.com www.youporn.com
  像我这种打星际的人一般都有敏锐的意识和洞察力,发觉到这个网站的域名有点特别,并且这个网址打不开,那就没错了,世界第一黄色网站,蛮横的中国的网监在封黄色网站方面很有心得啊,从排名封起,高!
  

68.Apple Computer, Inc. www.apple.com
  微软的网站前20名就占了4、6、7、13四个位置,而苹果只排68,由此可见微软果然是我们农民用的东西,也证明了我某条看人定律的正确性:用苹果的(无论是电脑、手机、Mp3还是啥)果然都是有钱人啊!