2012-11-14 53 views
10

URL查詢字符串中允許使用哪些字符?什麼是有效的URL查詢字符串?

查詢字符串是否必須遵循特定格式?

+1

什麼,看看都需要在這個問題上進行轉義什麼:HTTP: //tutorialoverflow.com/questions/2322764/what-c​​haracters-must-be-escaped-in-an-http-query-string – 2012-11-14 05:33:59

回答

10

http://tools.ietf.org/html/rfc3986

在2.2節保留字符,以下字符中列出:

保留= GEN-delims /子delims

GEN-delims =「:」 /「 /「/」?「/」#「/」[「/」]「/」@「

sub-delims =」!「/」$「/」&「/」'「/」 「)」/「*」 /「+」 /「」 /「;」 /「=」

該規範接着說:

如果URI組件數據將與保留字符的 目的爲衝突分隔符,那麼在形成URI之前,衝突數據必須爲 百分比編碼。

接着,在第2.3節未保留的字符,以下所列:

未預留= ALPHA/DIGIT /「 - 」//「_」 /「〜」

「」
+2

[RFC 3986 - ** 3.4節**](http://tools.ietf。 org/html/rfc3986#page-23)具體描述了查詢字符串,特別包括子分隔符和其他一些子分隔符。總結:''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''' ,''','''','(',')','*','+',',';','=',':','@','/', ?' – MrWhite

11

維基百科有你的答案:http://en.wikipedia.org/wiki/Query_string

URL編碼:某些字符不能是URL的一部分(例如,空間)和其他一些字符在URL中具有特殊含義:例如,字符#可用於進一步指定文檔的子部分(或片段); character =用於將名稱與值分開。查詢字符串可能需要轉換以滿足這些約束。這可以使用稱爲URL編碼的模式完成。

特別是,編碼的查詢字符串使用下列規則: ' '

  • 字母(AZ和az),數字(0-9)和字符,' - ', '〜' 和'_'保持原樣
  • SPACE編碼爲'+'或%20 [需要的引證]
  • 所有其他字符都編碼爲%FF十六進制表示,其中任何非ASCII字符首先編碼爲UTF-8 (或其他指定編碼)

T對應於代字符(「〜」)字符的八位字節通常被舊的URI處理實現編碼爲「%7E」;在不改變其解釋的情況下,「%7E」可以替換爲「〜」。 將SPACE編碼爲'+'並選擇「原樣」字符區分此編碼與RFC 1738.「

關於格式,查詢字符串是名稱值對。?將查詢字符串與URL。每個名稱值對由一個和號(&)分隔,而名稱(鍵)和值由等號(=)分隔。例如。 http://domain.com?key=value&secondkey=secondvalue

結構在我提供的維基百科參考:

  • 問號被用作分離器,而不是查詢字符串的一部分。
  • 查詢字符串由一系列字段值對組成
  • 在每對中,字段名稱和值由等號'='分隔。
  • 該系列配對由「&」號分隔,'&'(或分號,';'表示HTML中嵌入的URL,不是由...生成;請參見下文)。
  • W3C建議除了&符分隔符[6]之外,W3C還建議所有Web服務器都支持分號分隔符[6],以允許HTML文檔中的URL中的應用程序/ x-www-form-urlencoded查詢字符串,而無需實體轉義符號。
+0

你能否提供最後一段的引文? –

+0

我基於個人經驗添加了該段落,但我已更新並添加了更多信息以供我支持。在這樣做的時候,我注意到鍵值不僅被一個&符號隔開,而且可以是一個分號,儘管我以前從未碰到它。另外,問號不是QS的一部分,而是分隔符。 – cbillowes

+1

在答案的文本中:「每個名稱值對的前綴都帶有一個&符號」的措辭(「前綴」)具有誤導性。更進一步,有正確的「...對分離...」。 – laune

1

此鏈接有您需要的答案和格式化值。

https://perishablepress.com/url-character-codes/

爲了您的方便,這是清單:比那些需要進行轉義被允許在URL其他

<  %3C 
>  %3E 
#  %23 
%  %25 
{  %7B 
}  %7D 
|  %7C 
\  %5C 
^  %5E 
~  %7E 
[  %5B 
]  %5D 
`  %60 
;  %3B 
/ %2F 
?  %3F 
:  %3A 
@  %40 
=  %3D 
&  %26 
$  %24 
+  %2B 
"  %22 
space  %20 
+0

請注意,[只有鏈接的答案](http://meta.stackoverflow.com/tags/link-only-answers/info)不鼓勵,所以答案應該是搜索解決方案的終點(vs.而另一個引用的中途停留時間往往會隨着時間推移而過時)。請考慮在此添加獨立的摘要,並將鏈接保留爲參考。 – kleopatra

相關問題