2009-05-04 39 views
10

Sau khi nghiên cứu một chút về cách thức mà mọi người khác nhau slugify tiêu đề, tôi đã nhận thấy rằng nó thường thiếu làm thế nào để đối phó với các tiêu đề không phải tiếng Anh.quy tắc cho sên và unicode

mã hóa url rất hạn chế. Xem http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

Vì vậy, ví dụ làm thế nào để folks đối phó với cho sên tiêu đề cho những thứ như

"Una lágrima Cayo en la trường"

Người ta có thể đưa ra một bảng hợp lý cho indo ngôn ngữ châu Âu, I E. những thứ có thể được mã hóa thông qua ISO-8859-1. Ví dụ, một bảng chuyển đổi sẽ dịch 'á' => 'a', do đó sên sẽ

"una-lagrima-Cayo-en-la-arena"

Tuy nhiên, tôi đang sử dụng unicode (đặc biệt bằng cách sử dụng mã hóa UTF-8), vì vậy không có bảo đảm về những gì sắp xếp mã điểm tôi sẽ nhận được (tôi phải chuẩn bị cho những thứ không thể được mã hóa ISO-8859-1.

Tôi một nushell Làm thế nào để đối phó với điều này? Tôi có nên đến với một bảng chuyển đổi cho ký tự trong phạm vi ISO_8859-1 (< 255) và thả tất cả mọi thứ khác?

EDIT: Để cung cấp thêm một ngữ cảnh, một ưu tiên, tôi không thực sự mong đợi để slugify dữ liệu trong các ngôn ngữ châu Âu không indo, nhưng tôi muốn có một kế hoạch nếu tôi gặp phải dữ liệu đó. Một bảng chuyển đổi cho ASCII mở rộng sẽ được tốt đẹp. Bất kỳ con trỏ?

Ngoài ra, vì mọi người đang hỏi, tôi đang sử dụng python, chạy trên Google App Engine

+0

Nhân tiện, có lý do chính đáng nào khiến tại sao Unicode không được phép trong URL không? – Zifre

Trả lời

8

Bảng chuyển ngữ gần đầy đủ (đối với bộ ký tự latin, greek và cyrillic) có thể được tìm thấy trong slughifi library. Nó được hướng tới Django, nhưng có thể dễ dàng sửa đổi để phù hợp với nhu cầu chung (tôi sử dụng nó với ứng dụng dựa trên Werkzeug trên AppEngine).

+0

Cảm ơn zgoda, trong tình huống của tôi (trăn, công cụ ứng dụng), việc tăng cường slugify này sẽ làm công việc. – bustrofedon

+0

Hãy chắc chắn thêm '# - * - mã hóa: utf-8 - * -' vào đầu của slughifi.py –

1

Nếu vẫn thất bại, bạn có thể sử dụng một bảng chuyển đổi, nhưng có thể có một giải pháp thực hiện tốt hơn có sẵn. Ngôn ngữ phía máy chủ nào bạn đang sử dụng?

+0

Tôi đang sử dụng python (trang web đang chạy trong công cụ ứng dụng của google) – bustrofedon

2

Nói chung điều này sẽ phụ thuộc vào ngôn ngữ bạn mong muốn nhận được. Nếu cơ sở người dùng chính của bạn là tiếng Nhật, hãy bỏ mọi thứ nhưng các ký tự ISO-8859-1 không thể chuyển sang tốt.

Điều đó nói rằng, một tùy chọn có thể là sử dụng chế độ chuyển ngữ, nếu thư viện chuyển đổi tập ký tự của bạn hỗ trợ nó. Ví dụ, với biểu tượng GNUv, người ta có thể làm:

] echo Una lágrima cayó en la arena|iconv -f utf8 -t ascii//TRANSLIT 
Una lagrima cayo en la arena 

Như bạn có thể thấy, các ký tự có dấu trọng âm sẽ tự động được chuyển đổi thành thứ gì đó trong phạm vi ASCII. Tuy nhiên, nếu ngôn ngữ của bạn dựa trên biểu tượng GNU để chuyển đổi charset (và nếu nó trên linux, có thể là), mẹo này có thể được áp dụng trực tiếp bởi chỉ cần chỉ định "ascii // TRANSLIT" làm bộ ký tự chuyển đổi thành.

Một điều cần lưu ý với điều này, tuy nhiên, nó chỉ hiệu quả với các ký tự "trông giống như" một cái gì đó trong ASCII. Ví dụ:

] echo 我輩は猫である。名前はまだない。|iconv -f utf8 -t ascii//TRANSLIT            
???????????????? 

Như bạn có thể thấy, không cần nhiều trợ giúp cho tiếng Nhật và cần xử lý tiếp sau để xóa ký tự không phù hợp với URL.

+0

Cảm ơn, tôi không biết về khả năng chuyển ngữ của iconv. Tuy nhiên, trong bối cảnh của các ứng dụng web, iconv không phù hợp. Hãy để một mình thực tế là trang web đang chạy trên công cụ ứng dụng của google. – bustrofedon

4

Tôi chỉ cần sử dụng utf-8 cho đường dẫn URL. Miễn là tên miền không phải là IDN FF3, IE hoạt động tốt với điều này. Google đọc và hiển thị chúng chính xác. IRI RFC cho phép Unicode. Chỉ cần đảm bảo bạn phân tích cú pháp các url đến chính xác.

+0

chắc chắn, nhưng làm thế nào để bạn làm một RegEx cho ký tự Unicode? [- \ w] sẽ không khớp ** lágrima-cayó-en-la-arena ** –

+0

Tôi sử dụng .NET và nó hỗ trợ Unicode trong RegEx. Để kiểm tra javascript jquery.validate và http://www.ibm.com/developerworks/web/library/wa-uri/index.html – felixg