13

この Web ページがあるとします:
http://ww.xyz.com/Product.aspx?CategoryId=1

CategoryId=1 の名前が「Dogs」の場合、URL をhttp://ww.xyz.com/Products/Dogsのようなものに変換したいと思います。

問題は、カテゴリ名に外国語 (または URL に対して無効な) 文字が含まれている場合です。CategoryId=2 の名前が「Göra äldre」の場合、新しい URL は何ですか?


論理的にはhttp://ww.xyz.com/Products/Göra äldreのはずです
が、機能しません。まず、スペース (たとえば、ダッシュで簡単に置き換えることができます) のためですが、外国の文字はどうですか? Asp.net では、次のような URLEncode 関数を使用でき ます

URL ( http://ww.xyz.com/Product.aspx?CategoryId=2 )

理想的にはこれを生成したいのですが、これを自動的に行うにはどうすればよいですか (つまり、外国の文字を「安全な」URL 文字に変換する):
http://ww.xyz.com/Products/Gora-aldre

4

4 に答える 4

34

次の 2 つの拡張メソッド (asp.net / C#) を思いつきました。

     public static string RemoveAccent(this string txt)
    {
        byte[] bytes = System.Text.Encoding.GetEncoding("Cyrillic").GetBytes(txt);
        return System.Text.Encoding.ASCII.GetString(bytes);
    }

    public static string Slugify(this string phrase)
    {
        string str = phrase.RemoveAccent().ToLower();
        str = System.Text.RegularExpressions.Regex.Replace(str, @"[^a-z0-9\s-]", ""); // Remove all non valid chars          
        str = System.Text.RegularExpressions.Regex.Replace(str, @"\s+", " ").Trim(); // convert multiple spaces into one space  
        str = System.Text.RegularExpressions.Regex.Replace(str, @"\s", "-"); // //Replace spaces by dashes
        return str;
    }
于 2010-07-18T12:57:03.593 に答える
2

次のようなものを使用して、非 ASCII 文字を ASCII に音訳します。

var str = "éåäöíØ";
var noApostrophes = Encoding.ASCII.GetString(Encoding.GetEncoding("Cyrillic").GetBytes(str)); 

=> "eaaoiO"

ソース

于 2010-07-18T11:04:53.037 に答える
-1

http://www.blackbeltcoder.com/Articles/strings/converting-text-to-a-url-friendly-slugで説明されている関数を使用します。英語以外の文字を直接サポートしていませんが、追加の文字をサポートするように簡単に更新できます。

とてもきれいなスラグができるので気に入っています。

于 2010-12-17T06:04:54.723 に答える