2011-05-27 8 views
6

Tengo usuarios chinos de mi aplicación web PHP que ingresan productos en nuestro sistema. La información que ingresa es, por ejemplo, un título y precio del producto.¿Cómo escapar caracteres chinos Unicode en la URL?

Queremos utilizar el título del producto para generar una buena babosa de URL para esos productos. Parece que no podemos usar los atributos chinos como HREF.

¿Alguien sabe cómo manejamos un título como "婴儿 服饰" para que podamos generar una URL limpia como http://www.site.com/婴儿服饰?

Todo funciona bien para lenguajes "normales", pero los lenguajes UTF-8 altos nos dan problemas.

Además, al generar la URL limpia, queremos tener en cuenta el SEO, pero no tengo experiencia con los chinos en ese asunto.

+0

¿Qué diablos es un lenguaje "alto utf8", de todos modos? No tengo idea de para qué sirve la etiqueta UTF-16, pero debería haber usado la etiqueta PHP si no estaba buscando una respuesta general. Además, no nos ha mostrado ningún código, por lo que es imposible decir qué está mal. – tchrist

+0

Bien, cerrando – Jorre

Respuesta

6

Si la cadena ya es UTF-8, sólo tiene que utilizar rawurlencode para codificar la cadena correctamente:

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

UTF-8 es la codificación de caracteres preferido para caracteres no ASCII (aunque sólo caracteres ASCII están permitidos en URIs por lo que necesita usar el percent-encoding). El resultado es el mismo que en tchrist’s example:

http://example.com/%E5%A9%B4%E5%84%BF%E6%9C%8D%E9%A5%B0 
6

Este código, que utiliza los 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); 

cuando se ejecuta, impresiones:

http://www.site.com/%E5%A9%B4%E5%84%BF%E6%9C%8D%E9%A5%B0 

es que lo que estás buscando?

Por cierto, esos cuatro personajes son:

CJK UNIFIED IDEOGRAPH-5A74 
CJK UNIFIED IDEOGRAPH-513F 
CJK UNIFIED IDEOGRAPH-670D 
CJK UNIFIED IDEOGRAPH-9970 

que, según la base de datos Unicode::Unihan, parece ser Ying ér fú shì, o tal vez sólo ying er fú shi por Lingua::ZH::Romanize::Pinyin. Y tal vez incluso jing¹ jan⁴ fuk⁶ sik¹ o jing˥ jan˨˩ fuk˨ sik˥, usando la versión cantonesa desde Unicode::Unihan.

+2

La pregunta no estaba marcada con PHP cuando la contesté. – tchrist

Cuestiones relacionadas