最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已彻底解决】wordpress中,通过导入WXR格式的XML后,文章是可以正常显示,但是编辑模式中却无法查看

WordPress crifan 2246浏览 0评论

【已彻底解决】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/%5btrack_listing%5d_song_for_baby_jane_%28baby_jane_song%29_-_diego_modena_%26amp%3b_jean-philippe_audin/

编辑模式中,无法显示的地址:

http://localhost/wordpress/2009/08/31/[track_listing]_song_for_baby_jane_(baby_jane_song)_-_diego_modena_&_jean-philippe_audin

点击确定,更新后,最新的地址:

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 />&nbsp;&nbsp;&nbsp; filterd_str = ''</p><p>&nbsp;&nbsp;&nbsp; any_char_num_pattern = re.compile(r"[w|-]")</p><p>&nbsp;&nbsp;&nbsp; for c in inputString :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if c == ' ' :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # replace blanksplace with '_'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filterd_str += '_'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif any_char_num_pattern.match(c) :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # retain this char if is a-z,A-Z,0-9,_<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filterd_str += c<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #else :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp; print '---filtered char=',c</p><p>&nbsp;&nbsp;&nbsp; return filterd_str</p><p></p>
<br />

转载请注明:在路上 » 【已彻底解决】wordpress中,通过导入WXR格式的XML后,文章是可以正常显示,但是编辑模式中却无法查看

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
90 queries in 0.149 seconds, using 22.24MB memory