这是因为你想要的是不可能的,RFC说URL必须是ANSI字符的子集,其中包括拉丁a-Z字符、数字和符号的子集。没有Unicode URL这样的东西,它与您的数据库编码无关,WordPress正在完成它的工作,这是预期的行为。
http://www.blooberry.com/indexdot/html/topics/urlencoding.htm
“…仅字母数字[0-9a-zA-Z],特殊字符“$-\\.+!*”(),“[不包括引号-ed]和用于保留目的的保留字符可以在URL中未编码使用。”
然而,并非每个国家都说美国英语,因此我们有RFC3986:http://www.faqs.org/rfcs/rfc3986.html
Wikipedia 表示:
虽然URI仅限于ASCII字符集的子集,但IRIs可能包含通用字符集(Unicode/ISO 10646)中的字符,包括中文或日文汉字、韩文、西里尔文字符等。
语法
IRI通过使用通用字符集对URI进行扩展,而URI仅限于ASCII,字符数少得多。虹膜可以用八位字节序列来表示,但定义为字符序列,因为虹膜可以用手说或写。
2 这就是URL处理外来非ANSI字符的方式。因为URL只支持ANSI的子集,所以必须对非拉丁字符进行编码。
这不太好,但原来的HTTP规范不能处理非英语字符,这就是他们用来绕过这一点的黑客。同样的事情也会发生在汉字、表情符号和其他非英语字母上
一个实验,如果我创建一个名为
然后访问以下页面:
所有内容看起来都是正确的,但如果我复制粘贴URL,我会得到以下结果:
https://tomjn.com/%D8%AA%D8%AC%D8%B1%D8%A8%D8%A9/
哪个是
https://tomjn.com/تجربة/ 编码为URL
%D8%AA%D8%AC%D8%B1%D8%A8%D8%A9是一组阿拉伯字符,其中每个%编码的八位字节表示通用字符集中的字符代码
这是预期的行为,以及它应该如何工作,并在所有支持国际化URL和域的浏览器和HTTP应用程序中实现
原因the_permalink
这是因为它通过esc_url
和urlencode
, 但是,如果您删除了它,并将其按原样输出到页面上,它不会改变任何事情,因为浏览器会在用户端自动执行。如果没有,那么您最终将得到一个无法正常工作的损坏的HTTP请求。
那么404是从哪里来的呢
如果进入数据库并手动将slug更改为
تجربة
那么WordPress将永远无法找到它。浏览器将其更改为
%d8%aa%d8%ac%d8%b1%d8%a8%d8%a9
, 然后,WP将在数据库中搜索。但它找不到,因为它已更改为
تجربة