правила для слизней и юникод - PullRequest
10 голосов
/ 04 мая 2009

После небольшого исследования того, как люди тяготеют к заголовкам, я заметил, что часто не хватает способов справиться с неанглийскими заголовками.

Кодировка URL очень ограничена. Смотри http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

Так, например, как люди справляются с титульными слагами для таких вещей, как

"Una lágrima cayó en la arena"

Можно придумать разумную таблицу для индоевропейских языков, т.е. вещи, которые могут быть закодированы через ISO-8859-1. Например, таблица преобразования будет переводить 'á' => 'a', поэтому слаг будет

"уна-Lagrima-Кайо-ан-ла-Арена"

Тем не менее, я использую Unicode (в частности, использую кодировку UTF-8), поэтому нет никаких гарантий относительно того, какие коды кода я собираюсь получить (я должен подготовиться к вещам, которые не могут быть ISO-8859- 1 закодировано.

Я нюшка. Как справиться с этим? Должен ли я придумать таблицу преобразования для символов в диапазоне ISO_8859-1 (<255) и отбросить все остальное? </p>

РЕДАКТИРОВАТЬ : Чтобы получить немного больше контекста, априори, я на самом деле не ожидаю, чтобы slugify данных на не индоевропейских языках, но я хотел бы иметь план, если я столкнусь с такими данными , Таблица преобразования для расширенного ASCII была бы хорошей. Есть указатели?

Кроме того, поскольку люди спрашивают, я использую python, работающий на Google App Engine

Ответы [ 4 ]

8 голосов
/ 05 мая 2009

Почти полная таблица транслитерации (для латинских, греческих и кириллических наборов символов) находится в библиотеке slughifi . Он ориентирован на Django, но его можно легко изменить в соответствии с общими потребностями (я использую его с приложением на основе Werkzeug в AppEngine).

4 голосов
/ 05 мая 2009

Я просто использую utf-8 для URL-путей. Пока домен не IDN FF3, IE прекрасно с этим работает. Google читает и отображает их правильно. IRI RFC позволяет использовать Unicode. Просто убедитесь, что вы правильно анализируете входящие URL.

2 голосов
/ 05 мая 2009

В общем, это будет зависеть от языка, который вы ожидаете получить. Если ваша основная база пользователей - японская, то удаление всего, кроме символов ISO-8859-1, вряд ли пройдет хорошо.

Тем не менее, одним из вариантов может быть использование режима транслитерации, если ваша библиотека преобразования наборов символов поддерживает его. Например, с GNU iconv можно сделать:

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

Как видите, акцентированные символы были автоматически преобразованы во что-то в диапазоне ASCII. Как перевести это в код, конечно, будет зависеть от языка, который вы используете, но если ваш язык основан на GNU iconv для преобразования кодировок (и если он в linux, то, вероятно, так и есть), этот трюк, вероятно, можно применить напрямую просто указав "ascii // TRANSLIT" в качестве набора символов для преобразования.

Однако следует отметить, что он эффективен только для символов, которые «похожи» на что-то в ASCII. Например:

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

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

1 голос
/ 05 мая 2009

Если ничего не помогло, вы можете использовать таблицу преобразования, но может быть доступно более эффективное решение. Какой язык на стороне сервера вы используете?

...