2012-11-13 35 views
1

根據維基百科,URI被定義爲在URI的<分層部分>中允許空間嗎?

<scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ] 

我試圖通過的 「http://一些網站/網頁」,以Uri.IsWellFormedUriString並返回false。然後我嘗試了「http:// some%20site/page」,並對空格進行了編碼。仍然是虛假的。

但是,「http:// somesite/page%20Zero」會給我真實的。

我可以得出結論:在URI的「根級別」。空間不允許?或者還有一些我錯過了。

+0

維基百科是指完成規範 - [RFC 3986(http://www.ietf.org/rfc/rfc3986.txt),這是你應該讀什麼,如果你需要實現自己的烏里驗證或感興趣的確切細節什麼是允許的和什麼不是...... –

回答

2

您對URI的分解過於簡單。 「分層部分」包含authoritypathauthority進一步分解爲可選的用戶名/密碼,主機名和端口詳細信息。

http://some site/page URI有「some site」作爲主機名組件,它是無效的。

http://somesite/page zero URI有「somesite」作爲主機名,它是有效的,「page zero」作爲路徑組件,也是有效的。

1

URI的hierarchical部分實際上包括authoritypath部件;詳情請參閱RFC 3986

特別是,你會看到path組分基本上由pchars構建其可以是(除了別的以外)「PCT-編碼」的字符,在this section定義,其中%20就是一個例子。


我已經發布了PHP解決URI驗證的問題就在這裏,這可能會感興趣:

How to make this PHP URL parsing function nearly perfect?

代碼大致驗證對RFC 3986,但做了一些例外。

+0

您最近批准了以下包含抄襲文本的wiki編輯:http://stackoverflow.com/review/suggested-edits/1047273#./1047273?&_suid=1353421584593017052236174415713。將來,請在審覈代碼維基時更加小心。 – LittleBobbyTables