2010-02-08 26 views
5

,我們遇到一個奇怪的說法,我的工作,我可能是錯的這一點,所以這就是爲什麼我問。使用目錄名稱中的下劃線進行URL編碼?

我們的軟件輸出的目錄與目錄的名稱%5F取代下劃線的Apache服務器。

例如,如果目錄的名稱在我們的軟件中被列爲字符串,它將是:「andy_test」,但是當軟件將目錄輸出到Apache服務器時,它會變成「andy%5Ftest」。不幸的是,當你訪問服務器上的URL時,它最終變成了「andy%255Ftest」。

不知怎的,這似乎是我錯了,再次的進展是:

  1. andy_test < - (如軟件字符串)
  2. 安迪%5Ftest < - (列爲服務器上的目錄)
  3. 安迪%255Ftest < - (必須在調用同一個目錄從Web瀏覽器的服務器上的URL時使用)

我assum 「%5」是用於下劃線的編碼,「%25」是用於「%」的編碼。

現在看來,目錄名應該在服務器上列出的方式只是簡單的andy_test,如果您使用的是編碼的URI,那麼也許你最終會用「andy%5Ftest」來訪問apache服務器上的目錄。

我問這件事了後臺的人,他們說,他們只是:「任何編碼,這不是一個字母或數字

所以我想我在這個有點困惑。你能告訴我,誰是正確的,並指導我,爲什麼一些信息

回答

9

爲您創建它們,您應該不編碼的目錄名(如你所說)。編碼應該只發生在將其發送給瀏覽器的最後階段。這就是爲什麼你以'double'編碼結束:%25是%,而5F是下劃線第一編碼中的剩餘部分。

BTW,你不需要編碼無論如何強調(我根據rfc1738認爲)。

2.2。URL字符編碼問題

...

因此,只有字母數字,特殊字符 「$ -_。+!*'()」,和用於各自保留目的 保留字符可以使用 未在URL中進行編碼。

+1

感謝您的RFC參考! – leeand00 2010-02-08 15:39:22

3

有雙編碼,你是顯示什麼發生的兩個步驟應該是足夠了:?

andy_test既是在軟件中的字符串以及文件系統中的目錄或腳本的實際名稱(Web服務器訪問的資源)

andy%5Ftestandy_test URL編碼。這個字符串應該是瀏覽器使用的(它在下劃線的情況下並不是真的需要,但可能在其他情況下)。

andy%255ftest只是andy_test網址編碼兩次,這是沒有意義的,應該沒有必要。只需決定在哪裏進行編碼。如果你在代碼級別和網絡服務器級別都這樣做,這是可能發生的,並且結果是斷開的鏈接,除非你再次解碼兩次,這不是真的需要也不是理智的。

+0

我沒有寫軟件的後端,我只是試圖說服後端的人,有些事情做錯了。 – leeand00 2010-02-08 15:41:18

+0

@ leeand00:顯而易見,做兩次事情是錯誤的。目的應該是確定編碼的最佳位置,並且只在那裏(不是兩次)。 – 2010-02-08 16:03:28