簡體   English   中英

具有非字母字符的Objective-C NSURL

[英]Objective-C NSURL With Non-Alphabetical Characters

我正在嘗試創建帶有特殊字符(例如““,” |“,”-“,”:“等)的NSURL。如果我的字符串中包含任何這些字符,則NSURL不會初始化。 如何使用這些字符創建NSURL? 以下內容不起作用:

NSURL *url = [[NSURL alloc] initWithString:@"http://google.com?id=|test|"]; //if i remove the | it works. 

問題描述

來自[NSURL initWithString]的文檔

使用提供的URL字符串初始化NSURL對象。

-(id)initWithString:(NSString *)URLString

參數-URLString

用於初始化NSURL對象的URL字符串。 此URL字符串必須符合RFC 2396中所述的URL格式,並且不能為nil。 此方法根據RFC 1738和1808解析URLString。

返回值

使用URLString初始化的NSURL對象。 如果URL字符串格式錯誤,則返回nil。

討論區

此方法期望URLString僅包含格式正確的URL中允許的字符。 所有其他字符必須正確轉義。 任何使用百分比轉義的字符都使用UTF-8編碼進行解釋。

您需要先將字符串編碼為url。 解決方案之一是使用[NSString stringByAddingPercentEscapesUsingEncoding:] [1]

關於Stackoverflow還有關於將字符串編碼為url的其他討論:

  1. iOS:如何進行正確的URL編碼?
  2. 我如何URL編碼字符串

您應該使用ASCII值“ |” :ie%7C。 您不能直接使用這些類型的特殊字符。

    NSURL *url = [[NSURL alloc] initWithString:@"http://google.com?id=%7Ctest%7C"];

我希望它能起作用。

它不起作用的原因是因為這些字符不是URL的直接合法字符。

摘自對(實際上)相關問題的出色回答:關於SO的問題: 哪些字符使URL無效?

“一般來說,由RFC 3986 (請參閱第2節:字符 )定義的URL可以包含以下任意字符:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 -._〜:/?#[] @!$&'()* +,; =。其他任何其他字符。字符需要使用百分比編碼(%hh)進行編碼。URI的每個部分對於需要用百分比編碼的單詞表示哪些字符都有進一步的限制。”

但是在實踐中,您不應該真正在URL中使用逗號,方括號或時髦的內容-您不知道哪個瀏覽器會正確處理它。 絕對沒有充分的理由在URL中使用任何時髦的字符-即使它是本地文件的URL。

是的,對於Objective-C,使用NSURL URLWithString是更好的策略,但是主要要做的是堅持URL的原則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM