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

【已解决】wordpress中,url地址包含的中文,虽然已经过urllib.quote解析过了,但是却还是访问出错:403 Forbidden

WordPress crifan 3211浏览 0评论

【已解决】wordpress中,url地址包含的中文,虽然已经过urllib.quote解析过了,但是却还是访问出错:403 Forbidden

 

【背景】

在wordpress中,有个网页,其中包含了一张图片,但是无法显示。

去看了html源码发现,此处的图片地址是:

http://localhost/wordpress/wp-content/uploads/%D7%CA%C1%CF%CA%D5%BC%AF/pic/other_site/img2_pconline_1030230_hasee_l710r_15.jpg

其中“资料收集”4个中文字符所对应解析过的,url地址所允许的字符是:’%D7%CA%C1%CF%CA%D5%BC%AF’

但是,而且对应的位置中,也的确包含对应的图片的,结果却显示403 Forbidden错误,无法显示。

对应的截图是:

【未解决】wordpress中,url地址包含的中文,虽然已经过urllib.quote解析过了,但是却还是访问出错:403 Forbidden - crifan - work and job

 

【未解决】wordpress中,url地址包含的中文,虽然已经过urllib.quote解析过了,但是却还是访问出错:403 Forbidden - crifan - work and job

 

【未解决】wordpress中,url地址包含的中文,虽然已经过urllib.quote解析过了,但是却还是访问出错:403 Forbidden - crifan - work and job

【解决过程】

1.去Python中测试了一下,才发现,”资料整理”这四个中文字符,经过不同编码,的确对应着不同的结果,分别是: 

 >>> urllib.quote(‘资料收集’) ==
‘%D7%CA%C1%CF%CA%D5%BC%AF’

>>> urllib.quote(u’资料收集’.encode(“utf-8”))
‘%C3%97%C3%8A%C3%81%C3%8F%C3%8A%C3%95%C2%BC%C2%AF’

然后,又去wordpress中,手动一点点找到了对应的url中的所有的内容:

 【未解决】wordpress中,url地址包含的中文,虽然已经过urllib.quote解析过了,但是却还是访问出错:403 Forbidden - crifan - work and job

可以看出,其中url链接中的地址所包含的“资料整理”的对应的解析过的字符,是utf-8的,而不是上面的gb2312/GBK的,所以才会找不到图片,而上面的utf-8的地址中,是可以找到并显示图片的。

这下就明白了,看来wordpress中,应该是只支持utf-8解析出来的链接的。

2.以为上述理解是对的,后来一想,好像也不对。

因为上面的地址:

http://localhost/wordpress/wp-content/uploads/%D7%CA%C1%CF%CA%D5%BC%AF/pic/other_site/img2_pconline_1030230_hasee_l710r_15.jpg

中的%D7%CA%C1%CF%CA%D5%BC%AF,我可是手动创建的一个文件夹,文件夹名字就是%D7%CA%C1%CF%CA%D5%BC%AF,而不是用的中文名“资料整理”来创建的文件夹,所以,上述%D7%CA%C1%CF%CA%D5%BC%AF,只是对应的英文字符而已,不应该被wordpress自动解析成中文“资料整理”,然后再用其utf-8编码去翻译为:’%C3%97%C3%8A%C3%81%C3%8F%C3%8A%C3%95%C2%BC%C2%AF’,如果真的是这样,那也就太变态了吧。。。

3.又想起来了,之前是刚刚手动删除了之前创建的“资料整理”的中文文件夹,而手动拷贝(创建)了“%D7%CA%C1%CF%CA%D5%BC%AF”文件夹及其下所有的图片,但是此过程之后,却没有重启apache服务,估计是apache服务没有更新的原因而导致文件夹没法访问的。所以,去重启试试。
4.重启apache,重新登录账户之后,wordpress中,还是该网页中的图片还是无法显示。

而且才注意到,原来开始的时候,网页中显示的就是%D7%CA%C1%CF%CA%D5%BC%AF,但是地址却是’%C3%97%C3%8A%C3%81%C3%8F%C3%8A%C3%95%C2%BC%C2%AF’,见图:

【未解决】wordpress中,url地址包含的中文,虽然已经过urllib.quote解析过了,但是却还是访问出错:403 Forbidden - crifan - work and job

 真是悲催了。还是没搞定。

5.刚重新在wordpresswp-contentuploads下面手动建立了一个文件夹“%D7”,然后立刻就可以在网页中:

http://localhost/wordpress/wp-content/uploads/

看到了“%D7”,但是,却是地址却是http://localhost/wordpress/wp-content/uploads/%25D7/

即,自动针对%D7的地址生成了%25D7,好像是如果发现文件夹(包含文件名?)中包含有非utf-8编码的值,因为这里的%D7属于gb2312的编码,然后其就会自动帮你转化为对应utf-8编码的值?

刚刚才发现根本原因,其实很简单,就是百分号字符’%’,对应的ascii值是37=0x25,而不论是gb2312还是utf-8,也都是同样的编码值。

然后此处的文件夹名称%D7 = 字符百分号 + 字母D +数字7 = utf-8编码的%25 + 字母D + 数字7 = %25D7,如此而已。

即,对于你建立一个文件夹叫做%D7的话,那么无论wordpress中用的是utf-8还是GB2312(/GBK/GB18030),也都会编码为%25D7的。

 

6.刚去试了下,手动在wordpresswp-contentuploads下面手动建立了一个文件夹“资料收集”,然后生成网页中:

http://localhost/wordpress/wp-content/uploads/

显示的是对应的中文:

“资料收集”

对应的地址是:

http://localhost/wordpress/wp-content/uploads/%e8%b5%84%e6%96%99%e6%94%b6%e9%9b%86/

说明,对应的资料收集的utf-8编码,是%e8%b5%84%e6%96%99%e6%94%b6%e9%9b%86。

7. 关于wordpress中的编码,是可以自己设置的,为了兼容中文字符,还是utf-8较好。

8.想要解决此处的不能显示的问题,就明白如何做了,那就是在对于网页的源码中,对于资源路径中的百分号%,要转化为对应的%25即可。

【总结】

上面的%D7%CA%C1%CF%CA%D5%BC%AF,是一个百度空间里面所用的地址中的字符,是百度用的GB2312去编码“资料收集”四个中文字符,然后被quote解析出来的,而网页中的图片链接地址,就是为了防止图片不能显示,所以才替换为%D7%CA%C1%CF%CA%D5%BC%AF的,结果没想到,还是遇到了编码的问题,导致图片不能显示,看来,还是需要再去处理一下,把%换位%25,图片才能显示啊。

悲催的编码。。。

转载请注明:在路上 » 【已解决】wordpress中,url地址包含的中文,虽然已经过urllib.quote解析过了,但是却还是访问出错:403 Forbidden

发表我的评论
取消评论

表情

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 我的wordpress只要使用了press this,http://wiihua.com/wp-admin/press-this.php?v=8&u=https%3A%2F%2Fgator4221.hostgator.com%3A2083%2Fcpsess2157081873%2Ffrontend%2Fx3%2Findex.php&buster=1433434282136&t=HostGator.com%20Control%20Panel,就是这种站外链接就会403,但是我用自己站内的就不会,您知道怎么解决吗?
    wiihua9年前 (2015-06-05)回复
    • 没看懂你说的什么意思。。。
      crifan9年前 (2015-06-05)回复
88 queries in 0.190 seconds, using 22.18MB memory