Catatan: -stringByAddingPercentEscapesUsingEncodingtidak akan menghasilkan penyandian yang benar, dalam hal ini tidak akan menyandikan apa pun yang mengembalikan string yang sama.
Perhatikan juga Anda dapat menggunakan -stringByAddingPercentEscapesUsingEncodingmetode NSString .
Mike Weller
2
Ah ya, sekarang saya ingat stringByAddingPercentEscapesUsingEncodingperilaku funky . Itu hanya mengkodekan '&' dan '=' atau sesuatu yang konyol seperti itu.
Mike Weller
2
Menurut RFC1738 Anda perlu mengkodekan karakter tambahan juga. Jadi, meskipun ini menjawab pertanyaan OP, kegunaannya terbatas sebagai penyandi URL tujuan umum. Misalnya, itu tidak menangani non-alfanumerik seperti umlaut Jerman.
Alex Nauda
3
Ini tidak berfungsi (untuk iOS 7 bagian). Ini tidak mengonversi & menjadi% 26.
coolcool1994
1
Buat set karakter yang Anda butuhkan dari NSStringdengan characterSetWithCharactersInString, ambil kebalikannya invertedSetdan gunakan dengan stringByAddingPercentEncodingWithAllowedCharacters. Sebagai contoh, lihat jawaban SO ini .
Jika seseorang memberi tahu saya siapa yang menulis kode ini, saya akan sangat menghargainya. Pada dasarnya ia memiliki beberapa penjelasan mengapa string yang dikodekan ini akan memecahkan kode persis seperti yang diinginkan.
Saya memodifikasi solusinya sedikit. Saya suka ruang diwakili dengan% 20 daripada +. Itu saja.
@yuchaozh ini adalah fungsi yang Anda masukkan ke dalam kategori NSString. Jadi, self adalah NSStirng dan [self UTF8String] mengembalikan, dengan asumsi, stringnya dalam format UTF8.
lepaskan encodedString dan url. kode ini adalah tentang parameter penyandian. Untuk menyandikan seluruh string pass alamat alih-alih "parameter".
Zahi
Ini bekerja untuk saya ... disandikan bahkan karakter & yang saya mengalami masalah dengan.
Виктор Иванов
3
Ini dapat bekerja di Objective C ARC. Gunakan CFBridgingRelease untuk melemparkan objek gaya Core Foundation sebagai objek Objective-C dan mentransfer kepemilikan objek ke ARC. Lihat Fungsi CFBridgingRelease di sini.
Inilah yang saya gunakan. Catatan Anda harus menggunakan @autoreleasepoolfitur ini atau program mungkin crash atau mengunci IDE. Saya harus me-restart IDE saya tiga kali sampai saya menyadari perbaikannya. Tampaknya kode ini sesuai dengan ARC.
Pertanyaan ini telah ditanyakan berkali-kali, dan banyak jawaban diberikan, tetapi sayangnya semua jawaban yang dipilih (dan beberapa lainnya menyarankan) salah.
Inilah string tes yang saya gunakan: This is my 123+ test & test2. Got it?!
Google mengimplementasikan ini di Google Toolbox untuk Mac mereka . Jadi itu adalah tempat yang bagus untuk memuncak bagaimana mereka melakukannya. Pilihan lain adalah memasukkan Toolbox dan menggunakan implementasinya.
Lihat implementasinya di sini . (Yang turun persis seperti apa yang orang posting di sini).
ùÕ9y^VêÏÊEØ®.ú/V÷ÅÖêú2Èh~
- sepertinya tidak ada solusi di bawah ini yang mengatasi masalah ini!Jawaban:
Untuk menghindari karakter yang Anda inginkan adalah sedikit lebih banyak pekerjaan.
Kode contoh
Output NSLog:
Berikut ini adalah set karakter penyandian URL yang berguna:
Membuat rangkaian karakter yang menggabungkan semua hal di atas:
Membuat Base64
Dalam kasus Base64 karakter:
Catatan:
stringByAddingPercentEncodingWithAllowedCharacters
juga akan menyandikan karakter UTF-8 yang membutuhkan penyandian.Menggunakan Core Foundation Tanpa ARC:
Catatan:
-stringByAddingPercentEscapesUsingEncoding
tidak akan menghasilkan penyandian yang benar, dalam hal ini tidak akan menyandikan apa pun yang mengembalikan string yang sama.stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding
mengkodekan 14 karakter:testString:
encodedString:
Catatan: pertimbangkan apakah rangkaian karakter ini memenuhi kebutuhan Anda, jika tidak mengubahnya sesuai kebutuhan.
RFC 3986 karakter yang memerlukan pengodean (% ditambahkan karena ini adalah karakter awalan pengodean):
Beberapa "karakter yang tidak dilindungi" juga disandikan:
sumber
-stringByAddingPercentEscapesUsingEncoding
metode NSString .stringByAddingPercentEscapesUsingEncoding
perilaku funky . Itu hanya mengkodekan '&' dan '=' atau sesuatu yang konyol seperti itu.NSString
dengancharacterSetWithCharactersInString
, ambil kebalikannyainvertedSet
dan gunakan denganstringByAddingPercentEncodingWithAllowedCharacters
. Sebagai contoh, lihat jawaban SO ini .Ini disebut pengkodean URL . Lebih lanjut di sini .
sumber
CFURLCreateStringByAddingPercentEscapes()
sudah ditinggalkan. Gunakan[NSString stringByAddingPercentEncodingWithAllowedCharacters:]
sebagai gantinya.Ini bukan solusi saya. Orang lain menulis di stackoverflow tetapi saya lupa caranya.
Entah bagaimana solusi ini bekerja "dengan baik". Ini menangani diakritik, karakter Cina, dan hampir semua hal lainnya.
Jika seseorang memberi tahu saya siapa yang menulis kode ini, saya akan sangat menghargainya. Pada dasarnya ia memiliki beberapa penjelasan mengapa string yang dikodekan ini akan memecahkan kode persis seperti yang diinginkan.
Saya memodifikasi solusinya sedikit. Saya suka ruang diwakili dengan% 20 daripada +. Itu saja.
sumber
sumber
Ini dapat bekerja di Objective C ARC. Gunakan CFBridgingRelease untuk melemparkan objek gaya Core Foundation sebagai objek Objective-C dan mentransfer kepemilikan objek ke ARC. Lihat Fungsi CFBridgingRelease di sini.
sumber
IOS Swift:
Sekadar Informasi: Saya telah menggunakan ini:
sumber
Anda perlu melepaskan atau melepaskan
str
sendiri.sumber
Inilah yang saya gunakan. Catatan Anda harus menggunakan
@autoreleasepool
fitur ini atau program mungkin crash atau mengunci IDE. Saya harus me-restart IDE saya tiga kali sampai saya menyadari perbaikannya. Tampaknya kode ini sesuai dengan ARC.Pertanyaan ini telah ditanyakan berkali-kali, dan banyak jawaban diberikan, tetapi sayangnya semua jawaban yang dipilih (dan beberapa lainnya menyarankan) salah.
Inilah string tes yang saya gunakan:
This is my 123+ test & test2. Got it?!
Ini adalah metode kelas Objective C ++ saya:
sumber
Google mengimplementasikan ini di Google Toolbox untuk Mac mereka . Jadi itu adalah tempat yang bagus untuk memuncak bagaimana mereka melakukannya. Pilihan lain adalah memasukkan Toolbox dan menggunakan implementasinya.
Lihat implementasinya di sini . (Yang turun persis seperti apa yang orang posting di sini).
sumber
Ini adalah bagaimana saya melakukan ini dengan cepat.
sumber
// gunakan metode instance NSString seperti ini:
ingat, Anda hanya harus melakukan encode atau decode untuk nilai parameter Anda, tidak semua url yang Anda minta.
sumber
sumber