这篇文章提供了一个函数,但它不能处理非拉丁字符。
这是因为URL不能有非拉丁/ASCII字符。
浏览器可能会向您显示非拉丁字符,但这只是一个用户界面功能。
例如,如果您访问此Wiktionary URL:https://en.wiktionary.org/wiki/わかもの#Japanese
, 您的浏览器URL对日文字符进行编码以获得真实的URL:https://en.wiktionary.org/wiki/%E3%82%8F%E3%81%8B%E3%82%82%E3%81%AE#Japanese
然后URL在显示URL时对其进行解码。带有百分号的版本是真实的URL。
同样,对于任何其他非ASCII字符代码,例如阿拉伯语。如果你用slug创建帖子わかもの
然后保存并检查数据库,您将不会看到わかもの
, 你会看到%e3%82%8f%e3%81%8b%e3%82%82%e3%81%ae
. 同样,UI将显示日语字符,但如果复制链接,则会得到编码版本。
如果我们更新数据库并将帖子的slug改为わかもの
, 帖子现在无法加载,我们得到了404。这是因为slug无效,无法加载与该slug匹配的URL。
是的,我需要将非拉丁字符编码为%xx
你需要urlencode
它echo urlencode( $slug )