2009-05-04 8 views
10

人々がタイトルを違う方法でどのように掘り下げているかを少し調べてから、私は英語以外のタイトルを扱う方法が欠けていることが多いことに気付きました。スラッグとユニコードのルール

URLエンコードは非常に制限的です。人々は

のようなもののためにタイトルナメクジのための対処はどうすればよい例えば、そうhttp://www.blooberry.com/indexdot/html/topics/urlencoding.htm

を参照してください「ウナlágrimaカヨエン・ラ・アリーナ」

一つは、インドヨーロッパ言語のための合理的なテーブルを考え出すことができますすなわち、 ISO-8859-1でコード化できるもの。例えば、変換テーブルは、「A」=>「」、スラグのようになりますので

「ウナlagrima-カヨエン・ラ・アリーナ」しかし

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

どうすればいいですか?ISO_8859-1の範囲(< 255)の文字の変換テーブルを用意し、それ以外のものはすべてドロップする必要がありますか?

EDIT:先ほどのやり方を少し前向きに説明するために、インド以外の言語のデータを実際に掘り下げることは期待していませんが、そのようなデータに遭遇すれば計画を立てたいと思います。 拡張ASCII用の変換テーブルが良いでしょう。すべてのポインタ?また

、人々は他のすべてが失敗した場合は、変換テーブルを使用することができますが、可能なより高性能のソリューションがあるかもしれないGoogle App Engineの上

+0

ところで、URLにUnicodeが許可されていない理由は何ですか? – Zifre

答えて

8

slughifi libraryには、ほぼ完全な字形変換テーブル(ラテン語、ギリシア語、およびキリル文字セット用)があります。これはDjango向けですが、一般的なニーズに合わせて簡単に変更できます(私はAppEngineのWerkzeugベースのアプリケーションで使用しています)。

+0

私の状況(Python、アプリケーションエンジン)では、zgodaに感謝します。これは、slugifyが行うことになる仕事。 – bustrofedon

+0

必ず '# - * - coding:utf-8 - * - 'をslughifi.pyの先頭に追加してください –

1

を実行している、私のpythonを使用している、求めているからです。どのようなサーバーサイドの言語を使用していますか?

+0

私はPythonを使用しています(サイトはGoogleのアプリケーションエンジンで動作しています) – bustrofedon

2

一般的に、これは期待する言語に依存します。主なユーザベースが日本語の場合、ISO-8859-1文字以外のすべてを削除することはうまくいかないでしょう。

文字セット変換ライブラリでサポートされている場合は、1つのオプションで字幕モードを使用することが考えられます。例えば、GNUのiconvをして、1が行うことができます:あなたが見ることができるように

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

、アクセント付き文字は、自動的にASCIIの範囲内のものに変換しました。これをコードに変換する方法はもちろん、使用している言語に依存しますが、あなたの言語がcharset変換のGNU iconvに基づいている場合(それがおそらくLinux上にある場合)、このトリックはおそらく変換先の文字セットとして "ascii // TRANSLIT"を指定するだけです。

しかし、注意しなければならないのは、ASCIIのように見える文字でのみ有効です。例:あなたが見ることができるように

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

、それが日本のために多くの助けではありません、およびURLに適していない文字を削除し、その後さらに処理が必要です。

+0

ありがとう、私はiconvの「字体変換」能力について知らなかった。しかし、Webアプリケーションのコンテキストでは、iconvは適切ではありません。実際には、サイトはGoogleのアプリケーションエンジン上で実行されているという事実を言わせてください。 – bustrofedon

4

URLパスには単にutf-8を使用します。ドメインが非IDN FF3である限り、IEはこれでうまく動作します。 Googleは正しく読み込んで表示します。 IRI RFCはUnicodeを許可します。受信したURLを正しく解析するようにしてください。

+0

確かに、どのように正規表現の文字用の正規表現をしますか? [ - \ w]は一致しません**lágrima-cayó-en-la-arena ** –

+0

私は.NETを使用しており、RegExでUnicodeをサポートしています。 javacript check jquery.validateとhttp://www.ibm.com/developerworks/web/library/wa-uri/index.html – felixg

関連する問題