Alat pengembang · URL encoder & decoder
Cara menyandikan mailto: tautan dengan subjek, jeda baris isi, dan ampersand
· Mengapa itu penting
mailto pengkodean url html
Tautan mailto: dengan subjek dan isi adalah URL, jadi spasi, jeda baris, dan & harus dikodekan dalam persen. Posting ini menunjukkan apa yang rusak, padahal tidak, dan cara membuat tautan yang terbuka dengan benar di klien email.
Tautan kontak yang subjeknya berhenti di ruang pertama — mailto yang rusak: dan apa yang diterima klien email
Tautan kontak seperti <a href="mailto:test@example.com?subject=Support Inquiry">Send</a> rusak karena spasi di "Pertanyaan Dukungan" menghentikan tautan di klien email. Banyak klien hanya menerima "Dukungan" sebagai subjek. Hal ini terjadi karena tautan mailto: mengikuti RFC 6068, yang menetapkan bahwa spasi dan karakter khusus memerlukan pengkodean persen dalam parameter kueri. Ampersand memerlukan pengkodean %26 untuk menghindari menjadi pemisah parameter.
Mailto rusak: tautan menunjukkan masalahnya dengan jelas. Tautan yang dibuat seperti <a href="mailto:test@example.com?subject=Support Inquiry&body=Reply">Contact</a> menghasilkan pesan dengan subjek "Dukungan" saja. Pengujian di klien email yang berbeda menunjukkan toleransi yang berbeda-beda: Apple Mail menangani sebagian tautan, Gmail hanya menampilkan "Dukungan", Outlook gagal total.
mailto: adalah skema URL — singkatnya RFC 6068, dan bagian mana yang merupakan string kueri
RFC 6068 mendefinisikan skema mailto: URL dengan aturan pengkodean khusus komponen. Tidak seperti URL biasa, mailto: memiliki aturan khusus per komponen. Bagian alamat (test@example.com) tetap tidak dikodekan; @ dan domain bersifat struktural. Parameter kueri (subjek, isi, cc, bcc) memerlukan pengkodean. RFC 6068 referensi RFC 3986 untuk aturan, yang mewajibkan pengkodean persen untuk spasi dan karakter khusus. Ampersand dalam nilai menjadi %26 saat muncul sebagai data, bukan pembatas.
Memahami mailto: struktur skema mencegah kesalahan pengkodean. Bentuknya adalah: mailto:address?parameter1=value1¶meter2=value2. Tanda tanya memperkenalkan bagian kueri. Parameter pemisah ampersand tetap tidak dikodekan; hanya ampersand dalam nilai yang dikodekan sebagai %26. Jika subjek berisi "Tom & Jerry", enkodekan sebagai Tom%20%26%20Jerry. Ampersand antara subjek dan isi tetap tidak terkodekan. Pengkodean bertingkat ini rawan kesalahan.
Mengkodekan subjek dan isi — spasi sebagai %20, jeda baris sebagai %0D%0A, dan & sebagai %26 di dalam nilai
Pengkodean subjek dan badan memerlukan penanganan spasi dan karakter khusus yang cermat. Spasi menjadi %20 di tautan mailto:, bukan tanda tambah seperti formulir HTML. Perbedaan penting ini membuat pengembang terbiasa dengan formulir web. Jeda baris dikodekan sebagai %0D%0A (CRLF akhir baris di email). Ampersand menjadi %26. Tanda persen menjadi %25. Subjek biasanya berisi spasi, aksen, dan tanda kurung. Badan berisi spasi, aksen, jeda baris.
Pengkodean umum dalam tautan mailto: meliputi: spasi sebagai %20, baris baru sebagai %0D%0A, ampersand sebagai %26, persen sebagai %25, hash sebagai %23, pertanyaan sebagai %3F. Non-ASCII seperti aksen terlebih dahulu dikonversi ke UTF-8 byte kemudian dikodekan persen. "Laporan Über" menjadi %C3%9ber%20laporan. "Halo! Selamat tinggal" menjadi Hello%21%0D%0ASelamat tinggal. Enkode hanya nilai, bukan struktural? dan & karakter.
Contoh praktis: membuat tautan dengan subjek, isi dua baris, dan cc — hasil yang dikodekan dan tampilannya di klien email
Contoh praktis: membangun link dengan subjek "Agenda rapat (September)", isi "Mari kita berdiskusi: Sasaran triwulanan", dan cc "manager@example.com" menunjukkan pengkodean lengkap. Subjek memerlukan: spasi sebagai %20, tanda kurung sebagai %28 dan %29. Isinya memerlukan: "Mari kita diskusikan:" sebagian besar tidak berubah (spasinya %20), jeda baris sebesar %0D%0A, "Sasaran triwulanan" sebagian besar tidak berubah. Bidang cc tidak memerlukan pengkodean.
Mailto: yang dihasilkan adalah: mailto:contact@example.com?subject=Rapat%20agenda%20%28Sept%29&body=Let%20us%20discuss%3A%0D%0AQuarterly%20goals&cc=manager@example.com. Pengujian di browser mengungkapkan interpretasi klien email yang berbeda. Gmail membuka jendela penulisan dengan subjek yang benar, isi dua baris, dan cc. Outlook menunjukkan hasil serupa. Apple Mail memerlukan izin. Klien yang lebih tua gagal karena kekurangan dukungan tubuh.
Mengapa + salah di sini — mailto: mengikuti RFC 3986, bukan pengkodean formulir, jadi + tetap menjadi nilai tambah
Mengapa tanda plus salah—mailto: mengikuti RFC 3986, bukan pengkodean bentuk, jadi plus tetap literal—memperjelas perbedaan penting. HTML pengkodean formulir menggunakan tanda plus untuk spasi dalam string kueri. RFC 3986 dan RFC 6068 keduanya menentukan %20 untuk spasi. Mailto: with subject="Meeting+Agenda" membuat subjek dengan tanda tambah literal, bukan spasi. Kesalahan ini terjadi saat menyalin logika pengkodean formulir ke mailto: generation. Plus artinya plus, bukan spasi.
Mengapa ini penting: pengembang menyalin logika pengiriman formulir GET ke mailto: tautan pemutusan generasi. Subjek "Agenda Rapat" menjadi "Agenda+Rapat" dalam formulir. Di tautan mailto:, ini membuat "Rapat+Agenda" dengan nilai tambah literal. Pengguna memperbaiki baris subjek secara manual. Menguji tautan mailto: mengharuskan Anda mengekliknya atau memeriksa tautan yang dihasilkan, bukan menganalisis aturan formulir.
Kesalahan umum — lupa HTML-menghilangkan pemisah & di href, dan mengkodekan @ di alamat dengan persen
Mailto yang umum: kesalahan pembuatan termasuk lupa HTML ampers dan keluar dalam atribut href. Di HTML, ampersand di atribut harus & untuk XHTML yang valid. href="mailto:address?subject=Test&body=Test" tidak valid HTML; seharusnya href="mailto:address?subject=Test&body=Test". Ini mewakili pengkodean yang berbeda dari pengkodean URL. HTML parser menafsirkan & sebagai & sebelum browser memproses URL.
Pengujian kesalahan ini memerlukan pemeriksaan HTML sumber dan konsol browser. Klik kanan dan pilih "Periksa Elemen" untuk melihat nilai href sebenarnya. Salin-tempel nilai href ke bilah alamat (dengan awalan mailto:) dan periksa klien email. Beberapa tautan email berfungsi di browser tertentu, namun tidak di browser lain. Pengujian otomatis sulit dilakukan karena mailto: melibatkan klien eksternal, sehingga verifikasi manual menjadi hal yang umum.
Apa yang tidak tercakup di sini — perbedaan dukungan klien email dan banyak penerima secara mendalam
Hal yang tidak tercakup dalam hal ini mencakup perbedaan dukungan klien email dan banyak penerima. Tidak semua klien sama-sama mendukung parameter RFC 6068. Parameter body memiliki dukungan luas tetapi beberapa klien lama mengabaikannya. Parameter cc dan bcc memiliki dukungan variabel. Beberapa penerima memerlukan alamat email yang dipisahkan koma, pengkodean koma sebagai %2C untuk alamat kompleks. Lokal yang berbeda memerlukan pengkodean UTF-8 yang tepat untuk ditampilkan.
Evolusi klien email memengaruhi perilaku mailto: di seluruh platform. Klien email web modern (Gmail, Outlook.com) memiliki kepatuhan RFC 6068 yang lebih baik dibandingkan klien desktop lama. Klien seluler terkadang memiliki penguraian yang lebih ketat. Beberapa mendukung teks kaya sementara yang lain hanya mendukung teks biasa. Pengembang harus menguji dengan klien email yang benar-benar digunakan oleh audiens mereka. Implementasi nyata bervariasi meskipun ada spesifikasi RFC 6068.
Kesimpulan: enkode setiap nilai, pertahankan strukturnya — bagaimana mode nilai tunggal encoder & decoder URL memberi Anda subjek dan isi yang dikodekan untuk ditempel
Kesimpulan: enkode setiap nilai, pertahankan struktur—mode nilai tunggal encoder & decoder URL menghasilkan subjek dan isi yang dikodekan yang siap ditempelkan ke tautan. Alat ini menerima nilai yang tidak dikodekan seperti "Agenda rapat (September)" dan menghasilkan "Rapat%20agenda%20%28Sept%29". Salin keluaran langsung ke atribut mailto: href. Untuk badan multi-baris, tempelkan versi teks biasa dengan jeda baris, dapatkan versi yang dikodekan %0D%0A.
Praktik terbaik merakit mailto: tautan dari bagian yang dikodekan, bukan konstruksi manual. Saat membuat HTML secara dinamis di JavaScript atau templat, enkode setiap parameter secara terpisah sebelum digabungkan dengan pemisah &. Untuk encoder & decoder HTML, URL statis, andal menguji pengkodean sebelum menulis tangan. Proses pengkodean dokumen dalam komentar kode. Uji tautan mailto: yang dihasilkan dengan mengekliknya dengan klien email sebenarnya sebelum penerapan.