11

在研究了人们如何处理标题的不同方式之后,我注意到它经常错过如何处理非英语标题。

url 编码非常严格。见http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

因此,例如,人们如何处理诸如此类的标题

"Una lágrima cayó en la arena"

可以为印欧语言提出一个合理的表格,即。可以通过 ISO-8859-1 编码的东西。例如,转换表将翻译 'á' => 'a',所以 slug 将是

"una-lagrima-cayo-en-la-arena"

但是,我使用的是 unicode(特别是使用 UTF-8 编码),因此无法保证我将获得哪些排序代码点(我必须为无法使用 ISO-8859-1 编码的东西做好准备。

我很无语。如何处理?我是否应该为 ISO_8859-1 范围(<255)中的字符提供一个转换表并放弃其他所有内容?

编辑:为了先验地提供更多背景信息,我真的不希望用非印欧语言处理数据,但如果遇到此类数据,我想制定一个计划。扩展 ASCII 的转换表会很好。任何指针?

另外,由于人们在问,我正在使用 python,在 Google App Engine 上运行

4

4 回答 4

8

几乎完整的音译表(用于拉丁语、希腊语和西里尔语字符集)可以在slughifi 库中找到。它面向 Django,但可以轻松修改以满足一般需求(我将它与 AppEngine 上基于 Werkzeug 的应用程序一起使用)。

于 2009-05-05T13:21:26.440 回答
4

我只是将 utf-8 用于 URL 路径。只要域是非 IDN FF3,IE 就可以正常工作。Google 会正确读取并显示它们。IRI RFC允许使用Unicode。只要确保正确解析传入的 url。

于 2009-05-05T09:58:39.313 回答
2

一般来说,这将取决于您期望获得的语言。如果您的主要用户群是日本人,那么删除除 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 的字符。

于 2009-05-05T01:27:51.897 回答
1

如果一切都失败了,您可以使用转换表,但可能有更好的解决方案可用。您使用的是什么服务器端语言?

于 2009-05-05T01:01:42.893 回答