2010-06-18 59 views
7

我需要完整的URL編碼一個電子郵件地址。URL在C#中編碼所有非字母數字#

HttpUtility.UrlEncode似乎忽略某些字符,如!和。

我需要在格式化這樣的URL傳遞的電子郵件地址:

/Users/[email protected]/Comments 

因爲我的WebMethod URI模板看起來是這樣的:

[WebGet(UriTemplate = "Users/{emailAddress}/Comments")] 

期間休息WCF並不會通過電子郵件地址到我的REST webservice方法。 刪除期限通過值就好了。我希望有一種方法將編碼所有非字母數字字符,因爲所有使用此服務的人都需要這樣做。

編輯

我一直在使用考慮:

Convert.ToBase64String(Encoding.ASCII.GetBytes("[email protected]")) 

大多數其他語言有簡便的方法來將字符串轉換爲Base64?我最關心的是,我們的客戶誰消費這項服務將需要編碼使用Java,PHP和Ruby等

+0

重新格式化了一下。 – Femaref 2010-06-18 19:11:33

+0

你得到了什麼樣的錯誤? – 2010-06-18 19:38:36

+0

A 404 Not Found – Vyrotek 2010-06-18 19:45:35

回答

0

我發現了這個問題的解決方案。

.net 4.0實際上解決了URI模板中特殊字符的問題。

此線程指出我在正確的方向。 http://social.msdn.microsoft.com/Forums/en/dataservices/thread/b5a14fc9-3975-4a7f-bdaa-b97b8f26212b

我添加了所有的配置設置和它的工作。但請注意,它只能與.Net 4.0的REAL IIS設置一起使用。我似乎無法讓它與Visual Studio Dev IIS一起工作。

更新 - 其實,我試着刪除那些配置設置,它仍然有效。這可能是.Net 4.0默認解決了這個問題。

0

使用十六進制的電子郵件地址。有一個的ConvertTo和從進行了抽樣檢測...

你也可以只花葶不使用正則表達式讓你的URL看起來還是蠻符合A到Z的字符。

它將返回號碼的大名單,所以你應該是不錯的

 public static string ConvertToHex(string asciiString) 
    { 
     var hex = ""; 
     foreach (var c in asciiString) 
     { 
      int tmp = c; 
      hex += String.Format("{0:x2}", Convert.ToUInt32(tmp.ToString())); 
     } 
     return hex; 
    } 

    public static string ConvertToString(string hex) 
    { 
     var stringValue = ""; 
     // While there's still something to convert in the hex string 
     while (hex.Length > 0) 
     { 
      stringValue += Convert.ToChar(Convert.ToUInt32(hex.Substring(0, 2), 16)).ToString(); 
      // Remove from the hex object the converted value 
      hex = hex.Substring(2, hex.Length - 2); 
     } 

     return stringValue; 
    } 

    static void Main(string[] args) 
    { 
     string hex = ConvertToHex("[email protected]"); 
     Console.WriteLine(hex); 
     Console.ReadLine(); 
     string stringValue = 
     ConvertToString(hex); 
     Console.WriteLine(stringValue); 
     Console.ReadLine(); 

    } 
2

這裏是你可以用它來完成編碼一個潛在的正則表達式。

Regex.Replace(s, @"[^\w]", m => "%" + ((int)m.Value[0]).ToString("X2"));

我不知道有規定嚴格編碼,你可以點你的客戶所有非字母數字字符的現有框架的方法。

0

除非我弄錯了,URL編碼是簡單百分號後跟ASCII數字(十六進制),所以這應該工作...

Dim Encoded as New StringBuilder() 

For Each Ch as Char In "[email protected]" 
    If Char.IsLetterOrDigit(Ch) 
     Encoded.Append(Ch) 
    Else 
     Encoded.Append("%") 
     Dim Byt as Byte = Encoding.ASCII.GetBytes(Ch)(0) 
     Encoded.AppendFormat("{0:x2}", Byt) 
    End If 
Next 

上面的代碼導致something%2Bme%40example.com

+0

對不起,我使用VB.NET,但你可以很容易地改變:http://codechanger.com/ – 2010-06-18 19:51:37

+0

你會如何解碼? – Vyrotek 2010-06-18 21:05:53

+0

@Vyrotek你可以依靠'Uri.UnescapeDataString()'。 – 2010-06-18 21:24:35

相關問題