Objective-c iPhone パーセントで文字列をエンコードする?
2023-11-02 18:52:18
質問
私はこれらの特定の文字のパーセントエンコード文字列を取得したいのですが、objective-cでそれを行うにはどうすればよいですか?
Reserved characters after percent-encoding
! * ' ( ) ; : @ & = + $ , / ? # [ ]
%21 %2A %27 %28 %29 %3B %3A %40 %26 %3D %2B %24 %2C %2F %3F %23 %5B %5D
この文字列でテストして、動作するかどうか確認してください。
myURL = @"someurl/somecontent"
のような文字列にしたい。
myEncodedURL = @"someurl%2Fsomecontent"
で試してみたところ
stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding
で試してみましたが、うまくいかず、結果は元の文字列と同じままです。アドバイスをお願いします。
どのように解決するのですか?
私は、両方の
stringByAddingPercentEscapesUsingEncoding:
と
CFURLCreateStringByAddingPercentEscapes()
は不適当である。 その
NSString
メソッドではかなりの数の文字が欠落しますし、CF関数ではどの(特定の)文字をエスケープしたいかを指定するだけです。 正しい指定は、小さなセットを除くすべての文字をエスケープすることです。
これを解決するために、私は
NSString
カテゴリメソッドを作成し、文字列を適切にエンコードするようにしました。 これは、以下のものを除いてすべてパーセントエンコードします。
[a-zA-Z0-9.-_~]
としてエンコードし、スペースも
+
(としてエンコードします。
この仕様では
). また、unicode文字のエンコーディングも適切に処理されます。
- (NSString *) URLEncodedString_ch {
NSMutableString * output = [NSMutableString string];
const unsigned char * source = (const unsigned char *)[self UTF8String];
int sourceLen = strlen((const char *)source);
for (int i = 0; i < sourceLen; ++i) {
const unsigned char thisChar = source[i];
if (thisChar == ' '){
[output appendString:@"+"];
} else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' ||
(thisChar >= 'a' && thisChar <= 'z') ||
(thisChar >= 'A' && thisChar <= 'Z') ||
(thisChar >= '0' && thisChar <= '9')) {
[output appendFormat:@"%c", thisChar];
} else {
[output appendFormat:@"%%%02X", thisChar];
}
}
return output;
}
関連
-
[解決済み] Objective-CでNSStringsを連結するためのショートカット集
-
[解決済み] Objective-Cの定数
-
[解決済み] Objective-Cで乱数を発生させる
-
[解決済み] Objective-Cで、ある文字列が他の文字列を含んでいるかどうかを調べるにはどうすればよいですか?
-
[解決済み] Objective-Cのtypedef enumとは何ですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Objective-Cで文字列が空かどうかをテストするにはどうすればよいですか?
-
[解決済み] UINavigationControllerに右ボタンを追加する方法は?
-
[解決済み] TabBarのタブビューにプログラムで切り替える?
-
[解決済み] Objective-C / Cocoa TouchでのHTML文字デコード
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] スペースはいつプラス(+)または%20にエンコードされるべきですか?重複
-
[解決済み] UITextViewのキーボードをリターンキーで解除するには?
-
[解決済み】文字列をURLエンコードする方法
-
[解決済み] プロダクションコードでNSLog()を使ってはいけないというのは本当ですか?
-
[解決済み] iPhoneのSafariで<body>に適用したoverflow:hiddenは機能するのか?
-
[解決済み] Objective-CとSwiftのURLエンコーディング
-
[解決済み] UIScrollViewをコンテンツに合わせて自動サイズ調整する方法
-
[解決済み] iOSアプリをクラッシュさせる確実な方法とは?
-
[解決済み] Objective-Cのプロトコルでプロパティを含むものはどう扱えばいいのか?
-
[解決済み] アプリを提出する前にitunesのリンクを取得する