11

人々がタイトルをどのようにスラッグ化するかを少し調べた後、英語以外のタイトルを処理する方法が見当たらないことがよくあることに気づきました。

urlエンコーディングは非常に制限されています。http://www.blooberry.com/indexdot/html/topics/urlencoding.htmを参照してください

だから、例えば、人々は次のようなもののタイトルスラッグをどのように扱うのですか?

「Unalágrimacayóenlaarena」

インド・ヨーロッパ語族の合理的な表を考え出すことができます。ISO-8859-1を介してエンコードできるもの。たとえば、変換テーブルは'á'=>'a'を変換するため、スラッグは次のようになります。

「una-lagrima-cayo-en-la-arena」

ただし、Unicodeを使用している(特にUTF-8エンコーディングを使用している)ため、取得するソートコードポイントについての保証はありません(ISO-8859-1エンコードできないものに備える必要があります。

私は一言で言えば。これにどのように対処しますか?ISO_8859-1の範囲(<255)の文字の変換テーブルを考え出し、それ以外はすべて削除する必要がありますか?

編集:もう少しコンテキストを与えるために、先験的に、私は実際にはインド以外のヨーロッパ言語でデータをスラッグ化することを期待していませんが、そのようなデータに遭遇した場合は計画を立てたいと思います。拡張ASCIIの変換テーブルがあれば便利です。ポインタはありますか?

また、人々が尋ねているので、私はGoogleAppEngineで実行されているPythonを使用しています

4

4 に答える 4

8

ほぼ完全な音訳表(ラテン文字、ギリシャ語、キリル文字のセット用)は、slughifiライブラリにあります。Djangoを対象としていますが、一般的なニーズに合わせて簡単に変更できます(AppEngineのWerkzeugベースのアプリで使用しています)。

于 2009-05-05T13:21:26.440 に答える
4

URLパスにはutf-8を使用します。ドメインが非IDNFF3である限り、IEはこれで正常に動作します。Googleはそれらを正しく読み取り、表示します。IRIRFCは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 に答える