2016-07-31 229 views
0

我生成一個編碼的值以在我的URL中傳遞,問題是,我們的SEO經理配置應用程序,傳遞小寫URL,他說他不會更改配置。現在我必須以某種方式編碼我的網址,大寫,或整個字符串得到由他們的字符代碼進行編碼,所以我可以通過它沒有廢墟的主要價值,區分大小寫的URL不區分大小寫

例如,我產生的base64字符串如下:

aHR0cDovL2xvY2FsaG9zdDoxMzUwL2hvdGVscy9nMy8xMzk1LTA1LTEwLzEvOTI3MjIyZmY 
but it turn to be like this, when is passed to controller: 
ahr0cdovl2xvy2fsag9zddoxmzuwl2hvdgvscy9nmy8xmzk1lta1ltewlzevoti3mjiyzmy 

無法讀取...在解碼時遇到問題。

+0

它是你嘗試的某個表單字段值在這裏編碼?如果是這樣,爲什麼將它包含在Url中而不是POST呢? – sachin

+0

@sachin導致讀者不會發布,它只會得到(或最後,提供所有樣本得到) – deadManN

+0

'我們的SEO經理配置應用程序,傳遞小寫URL,他說他不會改變配置' - 讓IT人員配置他的互聯網訪問權限,以使YouTube網址也變爲小寫。 – GSerg

回答

1

如果將base64轉換爲小寫字母,則無法使用base64進行編碼,base64依賴於使用大寫字符。

如果您的管理器堅持的配置是傳入或傳出的查詢字符串參數被錯誤地放在低位,但是,您應該通知他他違反了URI規範,特別是query string部分。當然,最終由您自己的內部公司做出選擇,不管您是否希望在內部URI中使用小寫字母,但是您不應該認爲其他處理URI的應用程序會像這樣操作。

作爲@sachin上面陳述的,如果你可以讓這個POST請求(而不是像我現在假設的那樣得到一個GET),並且假設你的管理員在發送它們的時候並不低調:/你可以通過POST發送這些數據。

或者,您可以使用Base32來解決此問題,它只依賴大寫字符,但您可以在解碼(現在是Base32)字符串之前將其接收到的值轉換爲大寫。這是一個相當荒謬的解決方案,雖然...

只是要清楚:「大聲笑」將在Base32中編碼爲「NRXWY ===」,然後將其降低到「nrxwy ===」,然後您可以在解碼之前返回「NRXWY ===」。

這是兩個的NuGet程序包,它們Base32編碼:

  1. Base32按照RFC4648 here和作者聲稱它的測試,工作正常。

  2. 另一個看起來很吸引人的軟件包,因爲它支持zBase32 here,zBase32的優勢在於它只使用小寫字母,因此您不必擔心更改大小寫。門房/作者包括瞭如何讓zBase32編碼指令

兩者的這些(Base32和zBase32)使用Base64編碼字符集,所以他們都會很好地工作的URI,所有的charcaters的使用在URI中是有效的(utf-8的內容是無關緊要的,因爲你只是編碼字節,所以當你從Base32解碼時你會得到相同的字節)

+0

好吧,我告訴他,但它沒有任何作用,我看着它以某種方式編碼它能夠採取大寫char回來,有效的標誌不是base64本身的一部分。順便說一句base32使用什麼?它需要更多的字符編碼嗎?例如base64只需要+,/和=。第二,我們是基於utf-8字符系統的用戶,base32支持這件事情嗎?第三,base32是否在C#語言上實現? – deadManN

+0

我已經更新了答案,但簡短的版本是不,它使用較少的編碼字符,是的,它仍然支持utf-8,並且它是用C#實現的,但是你必須抓取一個庫,可能來自NuGet:P – starlight54

+0

它的工作,我使用了第二個版本,因爲它有casesensitive校正。 – deadManN