如何在URL中转义中文Unicode字符?

Jor*_*rre 6 php unicode url localization cjk

我有我的PHP Web应用程序的中国用户将产品输入我们的系统.输入的信息例如是产品标题和价格.

我们想使用产品标题为这些产品生成一个很好的URL slug.好像我们不能只使用中文作为HREF属性.

有谁知道我们如何处理像"婴儿服饰"这样的标题,以便我们可以生成一个干净的网址http://www.site.com/????

一切都适用于"普通"语言,但高UTF-8语言给我们带来了问题.

此外,在生成干净的URL时,我们想要记住SEO,但我对此没有中文经验.

tch*_*ist 6

此代码使用CPAN模块URI :: Escape:

#!/usr/bin/env perl

use v5.10;
use utf8;

use URI::Escape qw(uri_escape_utf8);

my $url  = "http://www.site.com/";
my $path = "????";

say $url, uri_escape_utf8($path);
Run Code Online (Sandbox Code Playgroud)

在运行时,打印:

http://www.site.com/%E5%A9%B4%E5%84%BF%E6%9C%8D%E9%A5%B0
Run Code Online (Sandbox Code Playgroud)

这就是你要找的东西吗?

顺便说一句,这四个字符是:

CJK UNIFIED IDEOGRAPH-5A74
CJK UNIFIED IDEOGRAPH-513F
CJK UNIFIED IDEOGRAPH-670D
CJK UNIFIED IDEOGRAPH-9970
Run Code Online (Sandbox Code Playgroud)

其中,根据统一::永硕数据库,似乎是颖儿副使,或者只是颖儿副使类语言:: ZH ::使罗马拼音::.甚至使用Unicode :: Unihan的粤语版本甚至jing¹jan⁴fuk⁶sik¹jing˥jan˨˩fuk˨sk˥.

  • 当我回答问题时,问题没有用PHP标记. (2认同)

Gum*_*mbo 6

如果您的字符串已经是UTF-8,只需使用rawurlencode正确编码字符串:

$path = '????';
$url = 'http://example.com/'.rawurlencode($path);
Run Code Online (Sandbox Code Playgroud)

UTF-8是非ASCII字符的首选字符编码(尽管URI中只允许使用ASCII字符,这就是您需要使用百分比编码的原因).结果与tchrist的例子相同:

http://example.com/%E5%A9%B4%E5%84%BF%E6%9C%8D%E9%A5%B0
Run Code Online (Sandbox Code Playgroud)