我的PHP Web应用程序的中国用户将产品输入我们的系统。输入的信息例如是产品标题和价格。
我们希望使用产品标题为这些产品生成一个很好的URL slug。 好像我们不能只使用中文作为HREF属性。
有谁知道我们如何处理像“婴儿服饰”这样的标题,以便我们可以生成一个像http://www.site.com/婴儿服饰
这样的干净网址?
一切都适用于“普通”语言,但高级UTF-8语言会给我们带来麻烦。
另外,在生成干净的URL时,我们想要记住SEO,但我没有中文经验。
答案 0 :(得分:6)
此代码使用CPAN module, 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);
运行时,打印:
http://www.site.com/%E5%A9%B4%E5%84%BF%E6%9C%8D%E9%A5%B0
这就是你要找的东西吗?
顺便说一下,这四个字符是:CJK UNIFIED IDEOGRAPH-5A74
CJK UNIFIED IDEOGRAPH-513F
CJK UNIFIED IDEOGRAPH-670D
CJK UNIFIED IDEOGRAPH-9970
根据Unicode::Unihan数据库,似乎是yīngérfúshì,或者只是 yingerfúshi per Lingua::ZH::Romanize::Pinyin 。甚至可能使用Unicode::Unihan中的粤语版本jing¹jan⁴fuk⁶sik¹或jing˥jan˨˩fuk˨sik˥。
答案 1 :(得分:6)
如果您的字符串已经是UTF-8,只需使用rawurlencode
对字符串进行正确编码:
$path = '婴儿服饰';
$url = 'http://example.com/'.rawurlencode($path);
UTF-8是非ASCII字符的首选字符编码(尽管URI中只允许使用ASCII字符,这就是您需要使用percent-encoding的原因)。结果与tchrist’s example中的结果相同:
http://example.com/%E5%A9%B4%E5%84%BF%E6%9C%8D%E9%A5%B0