如何在PHP中支持UTF8(日语,阿拉伯语,西班牙语......)URL

Jor*_*rre 2 php utf-8 internationalization

对于Web应用程序,我们需要链接到一些用户生成的内容.用户在例如产品的标题中键入,我们为该产品生成SEO友好URL:

像这样

title: a nice product

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

title: ???? ???

www.user.com/product/???? ???
Run Code Online (Sandbox Code Playgroud)

问题是不支持那些外语网址,浏览器拒绝打开这些链接.我已经看到wordpress设置支持那种网址,所以我想这是可能的.

有谁知道我们应该如何在PHP中支持这个?

维基百科处理这个问题很好:http://ar.wikipedia.org

Gum*_*mbo 6

尽管URL本身仅允许使用US-ASCII字符,但如果使用UTF-8 对URI进行编码,则可以在URI路径中使用Unicode字符,然后使用percent-encoding将其转换为US-ASCII字符:

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

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

$title = '???? ???';
$path = '/product/'.rawurlencode($title);
echo $path;  // "/product/%D8%A3%D8%A8%D8%AC%D8%AF%20%D9%87%D9%88%D8%B2"
Run Code Online (Sandbox Code Playgroud)

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