关于使WordPress支持中文url的方法

个人博客:www.shadiao.fun

WordPress版本已更新至5.4.1,此方法仍有效。且在文末增加了样本供下载学习,欢迎在评论区交流!

在撰写这篇博客的时候,我所使用的WordPress版本为:5.3.2zh-CN。

当我们使用WordPress撰写中文文章的时候,如果说在固定链接中选择加入一个%postname%项,生成的url就会因为含有中文而无法被支持,网站显示404。

查阅相关文章,网上的解决方法都是同出一源且支持的是4.8版本的WordPress,对现在的版本来说,情况已有所改变。因为被转载的次数过多,且大多数都并非规范转载,所以说原作者已不可考。这里的引用部分引自江程训(此站方法已无效),由此得知原作者或为江程训(今天终于在B站看到原文;其实这篇文章我在后者的博客并没有翻到但是毕竟我的另一个网站用了巨佬的主题嘛哈哈)。整理后的原因及解决方法如下:

之前在配置WordPress的时候做了个固定链接(%postname%),但在这之后我在我无意间点到文章的中文TAG的链接(例如http://yoursite.com/p/tag/这是中文的)直接给我弹了个404 Not Found,这我很郁闷啊,不能正常访问会影响到网站的用户体验的,不过经过多方查找资料才发现问题原因。wordpress 由于使用的是UTF8字符集.但是URL访问提交过来的URL中文字符是GBK 所以根据这个GBK的字符串查找文章标题,所以说肯定是找不到。。。 也就是说要对这个GBK字符串转换成UTF8

(问题原理引自江程训 此站方法已无效)

解决方法很简单:

  1. 进入wp-includes目录,打开该目录下的class-wp.php文件。(备份先!)
  2. 找到 $pathinfo = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : ''; (第167行)其实可以Ctrl+F查单词SERVER
  3. 将第二个$_SERVER['PATH_INFO']替换为mb_convert_encoding($_SERVER['PATH_INFO'], 'UTF-8', 'GBK')(注意分号)
  4. 再找到 list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );(第171行) 将$_SERVER['REQUEST_URI']替换为mb_convert_encoding($_SERVER['REQUEST_URI'], 'UTF-8', 'GBK')

保存,WordPress URL里就可以支持中文字符串了!

随着版本变化,情况可能又会改变,我更改后的截图放在这里供参考。

关于使WordPress支持中文url的方法插图 (修改后的代码) 

我是小蓝,如果我的文章对您有帮助的话,欢迎关注我! class-wp.php下载 这是我基于5.3.2按照文中方法修改后的样本,复制到5.4中仍正常使用(经对比该文件并未有更新)。下载后放入"wp-includes"目录下,替换原文件。建议与自己的修改的文件进行对比,加深理解。

没有账号? 忘记密码?

社交账号快速登录