Как избежать китайских символов Юникода в URL? - PullRequest
6 голосов
/ 27 мая 2011

У меня есть китайские пользователи моего веб-приложения PHP, которые вводят продукты в нашу систему.Информация, которую вы вводите, например, название продукта и цена.

Мы хотели бы использовать название продукта, чтобы сгенерировать хороший URL-адрес для этого продукта.Похоже, мы не можем просто использовать китайский в качестве атрибутов HREF.

Кто-нибудь знает, как мы обрабатываем заголовок, например, «婴儿 服饰», чтобы мы могли генерировать чистый URL-адрес, например http://www.site.com/婴儿服饰?

Всеотлично работает для «нормальных» языков, но высокие языки UTF-8 создают нам проблемы.

Кроме того, при генерации чистого URL мы хотим помнить о SEO, но у меня нет опыта работы с китайским в этом отношении..

Ответы [ 2 ]

6 голосов
/ 27 мая 2011

Если ваша строка уже UTF-8, просто используйте rawurlencode для правильного кодирования строки:

$path = '婴儿服饰';
$url = 'http://example.com/'.rawurlencode($path);

UTF-8 является предпочтительной кодировкой символов не-ASCII-символов (хотя в URI допускаются только символы ASCII, поэтому вам необходимо использовать процентное кодирование ). Результат такой же, как в примере tchrist :

http://example.com/%E5%A9%B4%E5%84%BF%E6%9C%8D%E9%A5%B0
6 голосов
/ 27 мая 2011

Этот код, который использует 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);

при запуске печатает:

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 ér fú shì , или, возможно, просто ying er fú shi за Lingua :: ZH :: романизировать :: пиньинь . И, может быть, даже jing¹ jan⁴ fuk⁶ sik¹ или jing˥ jan˨˩ fuk˨ sik˥ , используя кантонскую версию из Unicode :: Unihan .

...