wordpress输出中文地址显示乱码的解决方法

品味人生 • 发布于 2019-02-01 21:37:02

这个家伙很害羞,不想介绍自己!

说起这个问题,其实是早先有朋友向我反馈说frontopen主题中的“本文固定链接”部分,如果是中文url地址的话,这里会显示成"%e7%84%a6%e7%82%b9%e5%9b"类似的链接。

由于我自己的前端开发博客中,从来都没有用到过中文链接。一直都以为用户反馈的是浏览器地址栏中的中文会显示成如上的字符,所以没有重视。今天无意中在自己的beta测试站中发现了这样一个BUG,所以立即修复了这个问题,并写这篇文章用来记录一下。

首先,咱们来回忆一下,之前的链接是怎样的,如下图:

20140303204432

 

可以看到,本来应该是显示中文的地方,却显示出来一些类似编码的东西。

实际上这个并不算是什么乱码。对于程序来说,将url中的字符串通过urlencode()的方式进行编码。这样做的好处是可以在大部分情况下(也可以说是所有)被浏览器正确识别,并传递字符串。

wordpress毕竟是老外开发的东西,基本上不会考虑到中文字符的具体应用,所以就默认将所有的url字符串进行urlencode编码。而在the_permalink()方法中又缺少对encode的解码,所以造成了现在的这个状况。

OK,既然明白原理了,我们下面要做的就是将encode进行反向解码。

解码的方法很简单,使用PHP的urldecode()方法进行反向解码,然后再将结果输出即可。

不过在这之前我们还需要注意一下,在wordpress中如果直接使用the_permalink()方法直接输出固定链接的话是无法使用urldecode()进行转码输出的。因此我们在这里需要使用get_permalink()的方法来获取固定链接的字符串,然后用echo 的方式输出出来。

完整的代码是:

<?php echo urldecode(get_permalink()) ?>

呵呵,很简单吧。有没有觉得我说了半天的废话,实际上就一句话?

下面我们来看看实际插入后的效果吧~

20140303205447

 

至此,问题已经解决了。

本周在frontopen主题中就会更新并修复这个问题,如果等不及的话可以先尝试一下哦~,请经常关注我的前端开发博客,前端开拓者!