友好的なURLが必要なWebアプリケーションを作成していますが、7ビット以外のASCII文字を扱う方法がわかりません。アクセント付きの文字をURLでエンコードされたエンティティに置き換えることは望ましくありません。この種の変換を可能にするC#メソッドがありますか、または処理したいすべてのケースを実際にマップする必要がありますか?文字列をURLにする(例:モントリオールをモントリオールに変換する)
答えて
私はC#でそれを行う方法がわかりませんが、あなたが望む魔法の言葉は "Unicode分解"です。 "é"のような構成された文字を分解する標準的な方法があります。そして、ASCII以外のものをフィルタリングするだけでよいはずです。
編集:thisあなたが探しているものかもしれません。
私はこれらの文字があまりないと思いますが、文字列クラスのReplace()メソッドを使用すると、文字列を非常に簡単に置き換えることができます。上の類似した何かがある
:URL Routing: Handling Spaces and Illegal Characters When Creating Friendly URLs
はそれにもかかわらず、私は自動変換をお勧めしません。これらのタイプの変更を行うときには、いくつかの単語が意味を変えることがあります。素敵な言葉を不適切な言葉に変えることができます。
ありがとうございました。私は検索で何も見つかりませんでした。 –
このリンクは役立つかもしれない:http://www.codeproject.com/KB/cs/UnicodeNormalization.aspx
private string LatinToAscii(string InString)
{
string newString = string.Empty, charString;
char ch;
int charsCopied;
for (int i = 0; i < InString.Length; i++)
{
charString = InString.Substring(i, 1);
charString = charString.Normalize(NormalizationForm.FormKD);
// If the character doesn't decompose, leave it as-is
if (charString.Length == 1)
newString += charString;
else
{
charsCopied = 0;
for (int j = 0; j < charString.Length; j++)
{
ch = charString[j];
// If the char is 7-bit ASCII, add
if (ch < 128)
{
newString += ch;
charsCopied++;
}
}
/* If we've decomposed non-ASCII, give it back
* in its entirety, since we only mean to decompose
* Latin chars.
*/
if (charsCopied == 0)
newString += InString.Substring(i, 1);
}
}
return newString;
}
(ブラウザでのコピー/貼り付け、それが動作?)
ドメイン名のUnicode文字は、パス/クエリ部分とは異なる働きをしますが、IDNの "punycode"規則を使用してエンコードしています。 – bobince
使用UTF-8:
非ASCII の文字は、まずUTF-8 [STD63]に従ってコード化し、次に 対応するUTF-8シーケンスの各オクテットは、URI文字として表されるようにエンコードされたパーセント-でなければなりません。 - RFC 3986
+1。パス部分に非ASCII文字を使用することは完全に許可されています。 UTF-8バイトを16進数でエンコードし、ブラウザはアドレスバーにUnicodeバージョンを表示します。これがうまくいくところはWikipediaを参照してください。 – bobince
2番目の文は「アクセント付きの文字をURLエンコードされたエンティティに置き換えたくない」と言っても、「URIで表現するにはパーセントエンコードする必要があります」ということをするように指示しますか?私たちがここで持っているのは、コミュニケーションの失敗です。 – Ken
彼は、そのようなエンコードされた単語は、それが表す文字ではなく、 '%xx'として表示されると仮定していると思います。しかし、これはUTF-8でエンコードされていない場合にのみ当てはまります。 – Gumbo
ここにいくつかの良い回答があります。これらのメソッドは機能します。しかし、私はあなたの基本的な前提に疑問を呈しなければなりません。私はあなたが議論しているこれらの値は、基本的にクエリーストリングのパラメータであると推測します、はい?これは、特殊文字を除外する必要がある最も一般的な理由です。
2〜3年の間、私は文字列のエンコード/デコードの手法を使用して、このようなものをクエリ文字列で渡しました。私たちの方法は、ここで概説されているものほど洗練されていませんでしたが、それでもなお断続的な問題がありました。 2005年に、私が取り組んでいたシステムの大部分を書き直している間に、私たちはquerystringを通してID値を渡すことに決心しました。そのアプローチは非常にうまくいっていて、私はそれには何の欠点も考えられません。とにかくデータベースのバックエンドを持っているなら、あなたはすでにほとんどすべての文字列にidを付けています。検索などのためのものであれば、いつでもフォームポスト経由で送ることができます。または、最初に別のページを読み込む必要のないAJAXソリューションを使用することもできます。
これらの方法は、あらゆる状況に最適ではありません。他の場所よりも魔法の弾丸はありませんが、このアプローチは、私と私のチームにとって単純で非常に機能的です。それが少なくともあなたが考えているものだと思ってください。
これらはクエリーストリング変数ではありません。 http:/ server/name/of-montreal のURLのURLを作成しています。このURLスラッグ「of-montreal」を「OfMontréal」という値で自動的に生成します。 翻訳がうまくいかない場合は、常に手動で上書きされます。 –
それから、あなたは間違いなく他の人の提案を見ています。これらを一度生成してデータベースに保存することができます。これはさらに優れています。リアルタイムでエンコード/デコードすることは効率が悪いです。 – x4000
- 1. URLに特殊文字列を変換するには?
- 2. emoji❤withで文字列を変換する方法、regexでこのURLのように文字列に変換
- 3. Nodejs URL文字列をパス名のみに変換する
- 4. Android URLのコンテンツを文字列に変換する
- 5. 文字列(例:08:00)をdatetimeに変換する#
- 6. 文字列(例: "Car")をRubyのクラスに変換する
- 7. SOAP文字列メッセージをSoapMessageに変換するNullPointer例外
- 8. 文字列[]を文字列に変換するには?
- 9. C - 文字列(文)を文字列リストに変換する
- 10. 文字列をJavaの文字列配列に変換する
- 11. @をURLに渡すと文字列に変換されます
- 12. SVGSVGElementを文字列に変換する
- 13. Powershell:XMLを文字列に変換する
- 14. 文字列を色に変換する
- 15. 文字列を式に変換する
- 16. 文字列をIMAGE_Tに変換する
- 17. 文字列^をintに変換する
- 18. GUIDを文字列に変換する
- 19. 式を文字列に変換する
- 20. 文字列をchar *に変換する*
- 21. Cを文字列に変換する
- 22. HtmlAgilityPack.HtmlNodeを文字列に変換する
- 23. intを&文字列に変換する
- 24. 文字列をNSDateに変換する
- 25. Ruby:ARGVを文字列に変換する
- 26. nullを文字列に変換する
- 27. 文字列をCLLocationCoordinate2Dに変換する
- 28. 文字列をクラスに変換する
- 29. htmlを文字列に変換する
- 30. ルートパスを文字列に変換する
私はこの質問のURLから、StackOverflowデザイナーが気にしなかったものを見ています:) –
lol patrick、確かに、それらが戻ってきていないことがわかります:) – eglasius