【已彻底解决】wordpress中,通过导入WXR格式的XML后,文章是可以正常显示,但是编辑模式中却无法查看
【背景介绍】<br />通过自己写的脚本,实现了百度空间搬家到wordpress。<br />将生成的符合WXR格式的XML文件,导入到wordpress中后,文章是可以正常显示的。<br />但是在编辑其中一部分帖子的过程中,发现,如果该文章是通过上一篇或者下一篇中,点击对应的“下一篇”或“上一篇”而链接过来,文章是可以正常显示的。<br />但是对于这一部分的帖子,去编辑的时候,点击查看文章,却无法显示。
【解决过程】<br />比如某个帖子,这样的地址:<br />http://localhost/2007/04/making_baidu_the_article%26%2339%3bs_title_bar_space_with_a_lot_of_lace_pattern_lace/<br />是可以显示的,但是进去编辑模式,点击 查看帖子 ,得到的地址是:<br />http://localhost/2007/04/making_baidu_the_article’s_title_bar_space_with_a_lot_of_lace_pattern_lace/<br />是无法显示的。<br />很明显,两者地址不一样。<br />后者对于前者,是其中一些字符,已经被解析出来了,比如上面的撇号“’”,由此导致地址失效,无法访问。<br />先说明一下,前者的地址中最后的帖子的名字是:<br />making_baidu_the_article%26%2339%3bs_title_bar_space_with_a_lot_of_lace_pattern_lace<br />在对应百度空间搬家所得到的WXR中,对应的是文章的post name,是我之前通过google翻译原先文章的标题的中文,而得到的英文,再替换其中空格为下划,<br />再调用saxutils.escape而得到的HTML和XML都可以识别的(xml safe)的地址,适合于SEO和用户识别帖子。<br />但是WXR导入到WordPress后,结果在编辑的时候,“固定链接”一栏中的:<br />making_baidu_the_article’s_title_bar_space_with_a_lot_of_lace_pattern_lace<br />个人推断,估计是wordpress中该地址栏的文本解析器,所以把原先的:<br />making_baidu_the_article%26%2339%3bs_title_bar_space_with_a_lot_of_lace_pattern_lace<br />给解析出来,变成了:<br />making_baidu_the_article’s_title_bar_space_with_a_lot_of_lace_pattern_lace<br />估计是其一个bug吧。
【wordpress中,WXR导入的帖子,虽然可以正常显示,但是编辑模式中却无法查看 – 解决办法】<br />经过一番折腾,找到了个解决办法,那就是,点击固定链接中的“编辑”,然后啥都不用改,点击再点击“确定”,<br />然后再点击右边的“更新”,这样就可以把当前的post name,直接更新到数据库中,这时候,再点击“查看”的时候,文章的地址有点变化,变为:<br />http://localhost/2007/04/making_baidu_the_articles_title_bar_space_with_a_lot_of_lace_pattern_lace/<br />其中的post name变成了:<br />making_baidu_the_articles_title_bar_space_with_a_lot_of_lace_pattern_lace<br />把撇号这样的符号,去掉了。<br />(2)同时发现一个有趣的事情,经过测试,直接输入原先的地址:<br />http://localhost/2007/04/making_baidu_the_article%26%2339%3bs_title_bar_space_with_a_lot_of_lace_pattern_lace/<br />其会自动变成为上面的最新的地址:<br />http://localhost/2007/04/making_baidu_the_articles_title_bar_space_with_a_lot_of_lace_pattern_lace/
<br />
【后记】
又遇到一个类似的例子:
可以显示的地址:
编辑模式中,无法显示的地址:
http://localhost/wordpress/2009/08/31/[track_listing]_song_for_baby_jane_(baby_jane_song)_-_diego_modena_&_jean-philippe_audin
点击确定,更新后,最新的地址:
<br />由此推断出,wordpress中的post name,是会自动把你所输入字符串中的
[ ] ( ) ‘ &
等符号,自动给过滤掉的。
刚去测试了一下,得到的结果是:
键盘上可以输入的那些字符,除了下划线’_‘和短横线”–“之外,我们所常见到的字符,都会被过滤掉,包括:
~ ` ! @ # $ % ^ & * ( ) + = { } [ ] | : ; “ ‘ < > , . ? /
而中文字符的左括号”【”和右括号”】”等,都是属于普通的符号,不会被过滤掉。
<br />【总结】
导入xml到wordpress后,帖子本身可以查看,但是编辑模式中查看失败,原来是由于帖子的post name和本身真正的固定链接地址不匹配,后者是已经自动去除了除了字母,数字,下划线和短横线之外的其他标点符号类字符,因此导致帖子地址不对,网页打不开。
解决办法很简单,就是在导入的xml文件的时候,自己确保不要包含对应的特殊字符。目前已经写了个函数,可以实现对这类字符的过滤:
<p>#------------------------------------------------------------------------------<br /># remove invalid character in url(blog's post name and category's nice name)<br />def removeInvalidCharInUrl(inputString):<br /> filterd_str = ''</p><p> any_char_num_pattern = re.compile(r"[w|-]")</p><p> for c in inputString :<br /> if c == ' ' :<br /> # replace blanksplace with '_'<br /> filterd_str += '_'<br /> elif any_char_num_pattern.match(c) :<br /> # retain this char if is a-z,A-Z,0-9,_<br /> filterd_str += c<br /> #else :<br /> # print '---filtered char=',c</p><p> return filterd_str</p><p></p>
<br />
转载请注明:在路上 » 【已彻底解决】wordpress中,通过导入WXR格式的XML后,文章是可以正常显示,但是编辑模式中却无法查看