如何支持UTF8(日语、阿拉伯语、西班牙语等)URL';PHP中的s

如何支持UTF8(日语、阿拉伯语、西班牙语等)URL';PHP中的s,php,utf-8,internationalization,Php,Utf 8,Internationalization,对于web应用程序,我们需要链接到一些用户生成的内容。 用户键入某个产品的标题,我们会为该产品生成一个SEO友好的url: 像这样 title: a nice product www.user.com/product/a-nice-product title: أبجد هوز www.user.com/product/أبجد هوز 问题是这些外语url不受支持,浏览器拒绝打开这些链接。我见过wordpress的设置支持这种url,所以我想这是可能的 有人知道我们应该如何在php中支

对于web应用程序,我们需要链接到一些用户生成的内容。 用户键入某个产品的标题,我们会为该产品生成一个SEO友好的url:

像这样

title: a nice product

www.user.com/product/a-nice-product

title: أبجد هوز

www.user.com/product/أبجد هوز
问题是这些外语url不受支持,浏览器拒绝打开这些链接。我见过wordpress的设置支持这种url,所以我想这是可能的

有人知道我们应该如何在php中支持这一点吗


wikipedia处理得很好:

您可能需要在URL的非ASCII部分使用IDNA编码


恐怕你有麻烦了。URL的编码由浏览器自行决定。在尝试支持带有挪威特殊字符的URL时,我遇到了同样的问题,这根本不可能始终如一

您可以将浏览器重定向到UTF-8 URL,但它可能会在ISO中回复您。在浏览器(例如firefox)将ISO和UTF-8格式混合在同一url中的某些情况下,情况会变得更糟(尤其是get参数)


我的建议很简单;不要这样做,使用英语(搜索引擎优化也更好!)或语音拼写。

尽管URL本身只允许使用US-ASCII字符,但如果您使用UTF-8编码这些字符,然后使用以下命令将其转换为US-ASCII字符,则可以:

以不同字符编码形式在内部提供标识符的系统,如EBCDIC,通常会在内部接口将文本标识符转换为UTF-8[](或US-ASCII字符编码的某些其他超集),从而提供比简单地对原始八位字节进行百分比编码所产生的标识符更有意义的标识符

所以您可以这样做(假设UTF-8):


尽管URI路径实际上是用百分比编码编码的,但大多数现代浏览器在使用UTF-8时都会以Unicode显示此序列表示的字符。

您应该对阿拉伯语或Unicode文本进行URL编码

urlencode('كلام-عربي')
将字符集代码添加到页面的head标记非常重要,否则链接将无法工作

<meta charset="utf-8">


IDNA仅用于实际域名。URL的其余部分使用百分比编码(
urlencode()
在PHP中)。我们可以使用urlencode()对所有非ascii字符进行编码吗?对我来说这不是问题,但我的web应用程序的客户端是国际性的,并且将使用自己语言的标题。请检查,他们处理得很好,所以我一定是可能的?@Jorre他们也有同样的方法。它的浏览器使它看起来很漂亮。更好的音译是itHi@BjornS,谢谢,但它并不总是可以用语言拼写,例如Thaithat听起来很有趣,但是如果用/product/españa来制作这个/product/espana而不是/product/espa%F1a,不是更好吗?我会确保你检查这些URL的复制粘贴能力和书签能力。根据我的经验,当您将它们作为锚定标记或重定向url提供给浏览器时,它们通常可以正常工作,但一旦浏览器必须自己存储和检索url,所有赌注都将落空。希望你能找到解决办法,祝你好运!这取决于你所说的“很好”是什么意思。在我的IE8中,最后一个
/
后面的URL显示为%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9。
<meta charset="utf-8">