2011-11-02 62 views
1

在C或Objective-C中,我需要一種方法來分離URI和路徑,並給出一個完整的URL。如何確定C或Objective-C中的URL,URI和路徑?

例子:

給出的URL

mms://a11.l412923342423.c658546.g.lm.akamaistream.net/D/13/414392/v0001/reflector:36751 

獲取URL很容易,但我怎麼能確定在何處URI結束,所在的路徑開始,在C或Objective-C?

我知道URI是a11.l412923342423.c658546.g.lm.akamaistream.net,Path是D/13/414392/v0001/reflector:36751,但是如何以編程方式識別?

我無法弄清楚,任何示例代碼將極大地幫助我。謝謝。

+1

我不知道什麼是URI,但它通過搜索整個字符串中的第一個「/」來工作嗎? –

+1

我想過那個,但是如何識別路徑開始的其他斜槓,它不是按順序排列的? – Winston

+0

你是否對Cocoa編碼?如果是這樣,請查看'NSURL'。 –

回答

3

貌似//表示URI的起始和隨後的/標誌着路徑的開始:

char *uri_start; // Start of URI 
int uri_length; // Length of URI 
char *path_start; // Start of Path (until end of string) 

uri_start = strstr(url, "//"); 
if (uri_start == NULL) { 
    uri_start = url; 
} else { 
    uri_start += 2; // skip "//" 
} 

path_start = strstr(uri_start, "/"); 

if (path_start == NULL) { 
    path_start = ""; // Path empty 
    uri_length = strlen(uri_start); 
} else { 
    path_start += 1; // skip "/" 
    uri_length = path_start - uri_start - 1; 
} 

編輯: 複製URI:

char uri[300]; // or char *uri = malloc(uri_length + 1); 
memcpy(uri, uri_start, uri_length); // Copy the uri 
uri[uri_length] = '\0'; // nul-terminate the uri string 

或(如果沒關係,改變原始字符串):

uri_start[uri_length] = '\0'; // nul-terminates the uri but alters the url 
+0

非常感謝您的代碼Klas!我會試試看,並會讓你知道結果。 – Winston

+0

嘿Klas,它像一個魅力工作!非常感謝!唯一缺少的東西是我無法正確地獲取它,只是單獨獲取URI(a11.l412923342423.c658546.g.lm.akamaistream.net),沒有附加Path。我試圖從完整的URL中「減去」路徑,但它沒有奏效。你能幫我解決一個問題嗎? – Winston

+0

不錯!我甚至沒有通過編譯器來運行它。我已經添加了代碼來複制uri作爲答案的附錄。 –

2

可以在URL中查找第三個SLASH,甚至測試第一個和第二個是否連續。

+0

感謝您的快速回答。我不熟悉C或Objective-C。你有沒有關於示例代碼的建議? – Winston

2

NSURL對象有許多屬性,它們給出URL的各種組件。你有沒有嘗試過使用這些?

+0

我現在是NSURL的文檔。謝謝! – Winston