使字符串URL友好(例如:将蒙特利尔转换为蒙特利尔)

时间:2009-03-04 18:14:52

标签: c# string internationalization friendly-url

我正在编写一个需要友好网址的网络应用程序,但我不知道如何处理非7位ASCII字符。我也不想用URL编码实体替换重音字符。是否有允许这种转换的C#方法,或者我是否需要实际绘制出我想要处理的每个案例?

7 个答案:

答案 0 :(得分:3)

我不知道如何在C#中做到这一点,但你想要的神奇词是“Unicode分解”。有一种标准的方法来分解像“é”这样的组合字符,然后你应该能够过滤掉非ASCII字符。

编辑:this可能就是您要找的。

答案 1 :(得分:2)

使用UTF-8:

  

非ASCII   首先必须根据UTF-8 [STD63]对字符进行编码   相应的UTF-8序列的每个八位字节必须是百分比 -   编码为URI字符。    - RFC 3986

答案 2 :(得分:1)

有类似的内容:URL Routing: Handling Spaces and Illegal Characters When Creating Friendly URLs

尽管如此,我不建议自动转换。在进行这些类型的更改时,某些单词可能会改变含义。你可以把一个好词变成一个不恰当的词。

答案 3 :(得分:1)

此链接可能有所帮助: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;
}

答案 4 :(得分:1)

好的 - 这里有一些好的答案。那些方法会起作用。但是,我必须质疑你的基本前提。我假设您正在讨论的这些值基本上是查询字符串参数,是吗?这是必须过滤掉特殊字符的最常见原因。

两三年来,我使用字符串编码/解码方法通过查询字符串传递这样的东西。总是存在间歇性的问题,因为 - 对它来说 - 有很多不同的可能的特殊字符,一个浏览器与另一个浏览器的问题等等。我们的方法并不像这里概述的那样复杂,但仍然如此。在2005年,在重写我正在研究的大部分系统时,我们决定只通过查询字符串传递id值。这种方法效果非常好,我想不出任何弊端。如果你有一个数据库后端,你已经有一个id附加到几乎每个字符串,无论如何。如果这是用于搜索等,您可以随时通过表单发送 - 或者您可以使用不需要您首先加载其他页面的AJAX解决方案。

这些方法对于每种情况都不是最好的 - 这里没有任何灵丹妙药 - 但这种方法对我和我的团队来说简单而且非常实用,所以我认为至少你可以考虑一下。

答案 5 :(得分:0)

好吧,我觉得这很简单, 这些字符不多,你可以通过使用字符串类的Replace()方法非常容易地替换字符串中的字符。

答案 6 :(得分:0)

http://Montréal.com

(在浏览器中复制/粘贴,它有效吗?)