2009-08-22 41 views
3

我使用一個視圖中Url.Encode和它替換爲+,從而代替空格:如何在ASP.NET MVC中更改Url.Encode字符替換策略?

/生產/貓最音樂我得到... /貓+的+音樂

我確定這是一個容易的,但你在哪裏去配置哪些字符用於此?直到我從你們一個更好的答案

public static string EncodeForSEO(this UrlHelper helper, string unencodedUrl) 
{ 
    return helper.Encode(unencodedUrl.Replace(' ', '-')); 
} 

我會做這個。

編輯:感謝Guffa指出我的草率編碼。

+0

不要忘記採取特殊字符 – Cleiton 2009-08-22 18:33:44

+0

這些將被調用反正編碼被照顧的照顧,是不是他們? – 2009-08-22 18:34:40

+0

只是一個註釋:Url路徑編碼與Url參數編碼不同。路徑中的「+」字符不是空格字符的正確替代,會導致問題。對於上面所做的SEO,將「」替換爲「 - 」是一種很好的技術。 MVC可以使路徑和查詢字符串參數可以互換,但它們不是。 – 2012-06-18 22:36:15

回答

3

您無法更改UrlEncode方法使用哪些字符,在標準中如何使用「+」作爲空格在URL的編碼方式中定義,而使用「 - 」則意味着該方法會更改該值而不僅僅是編碼它。由於「 - 」字符未編碼,因此無法將字符串解碼爲原始值。

在你的方法中,在進行替換之前不需要檢查字符。如果Replace方法找不到要替換的內容,它只是返回原始字符串引用。

public static string EncodeForSEO(this UrlHelper helper, string unencodedUrl) { 
    return helper.Encode(unencodedUrl.Replace(' ', '-')); 
} 
+0

感謝您的代碼修復。 它不僅僅是編碼,特別是它使url參數更友好。 在控制器端,雖然對HttpUtility.Decode的調用將解碼正常編碼的參數的任何部分。 – 2009-08-22 18:28:56

+0

嗯......爲什麼「演出音樂劇」比「貓音樂劇」更適合搜索引擎優化? – Guffa 2009-08-22 20:53:06

+0

誰知道,我被告知這是在我參加的一次演講中,由一位SEO專家在google上首選的方式。堆棧溢出似乎也做同樣的事情。 – 2009-08-22 23:54:30

4

我想提請注意路徑與查詢字符串編碼差異

MVC允許/鼓勵我們寫路徑(路線),可以更容易比查詢字符串記住。例如/Products.aspx?id=1可以在MVC,是/Products/View/1

建築上,它也鼓勵,對SEO友好,這可能會或可能沒有必要像/Products/View/1/Coffee

如果名稱中有空格字符等數據,或必要的參數是一個包含空格字符的字符串,並且您將其包含在URL 路徑中,必須發生兩件事之一,因爲如果未經過編碼,「'不能留在Url路徑或查詢字符串參數中。

  1. 必須UrlPathEncode()字符串
  2. 首先你變換的空間字符串中,
    • 然後調用UrlPathEncode(),因爲你可能有其他字符的編碼需要。

:有URL編碼(意味着查詢字符串)和URL路徑編碼(意味着URL的路徑部分)之間有很大的區別

  • cats the musical - >以UrlEncode - >cats+the+musical - 這是在URL 路徑不有效
  • cats the musical - > UrlPathEncode - >cats%20the%20musical

如果您正在追蹤;回到Web窗體VS MVC - /Products.aspx?name=Coffee+Beans將被改寫爲/Products/View/Coffee%20Beans

因此,這讓我們在哪裏OP的問題開始。問:你如何得到搜索引擎優化和人類友好的網址?問:在UrlPathEncoding剩下的代碼之前,使用@Guffas代碼將自己代碼中的「」替換爲「 - 」。

在我工作過的網站中,當我們有一個用戶輸入的值只用於SEO(比如博客標題或類似的)時,我們通過將連續的空格合併爲一個單一的「 「例如

cats   the  musical
,否則便 cats-----the-----musical成爲 cats-the-musical

+0

感謝您的有益補充。 – 2012-06-19 09:20:33

+0

您不再需要用連字符替換空格。現代瀏覽器會爲你創建漂亮的URL,不會再有%20soup。 – 2014-08-20 15:07:59

+0

@ChrisMarisic感謝您的更新。看來Chrome和Firefox現在將解釋用戶意圖對網址進行編碼,並且對用戶不那麼嚴格;他們會將「'編碼爲%20。 Firefox將顯示空格,但Chrome仍會在地址欄中顯示%20。然而,潛在的問題是規範不會消失,並且URL中的%20仍然是必需的,不是「人性化的」。人們在這些瀏覽器之外剪切和粘貼網址,Firefox和Chrome瀏覽器仍然會正確編碼網址。 – 2014-08-24 22:34:12