Bahasa Melayu

Alat pembangun · URL pengekod & penyahkod

RFC 3986 aksara terpelihara dan tidak terpelihara: apa yang dinyatakan dalam piawaian URI

· Latar belakang

pengekodan url rfc3986 pengekodan peratus

URI aksara dikategorikan ke dalam reserved gen-delims, reserved sub-delims dan unreserved sets
Ilustrasi vektor ToolAcre asal

RFC 3986 membahagikan aksara kepada reserved, unreserved dan segala-galanya, dan pemisahan itu menerangkan setiap peraturan pengekodan peratus yang telah anda temui. Catatan ini membaca bahagian yang berkaitan dengan jelas.

RFC 3986 aksara terpelihara dan tidak terpelihara—apa yang penting apabila anda membina URL

RFC 3986 membahagikan aksara kepada tiga kategori: tidak disimpan, dikhaskan dan semua perkara lain yang mesti dikodkan. Aksara yang tidak disimpan tidak memerlukan pengekodan—ini ialah huruf, angka, sempang, noktah, garis bawah dan tilde. RFC menyenaraikan ini secara eksplisit dalam bahagian 2.3, menyatakan ia selamat untuk dibiarkan tanpa dikodkan dalam mana-mana konteks URI. Pengujian dalam URL pengekod & penyahkod dengan aksara ini menunjukkan ia melalui tidak berubah. Aksara tersimpan terbahagi kepada gen-delims (: / ? # [ ] @) dan sub-delims (! $ & ' ( ) * + , ; =), setiap satu dengan makna struktur dalam komponen URL yang berbeza.

Bilakah watak memerlukan pengekodan? Aksara tersimpan mesti dikodkan peratus sahaja apabila ia mewujudkan kesamaran. Garis miring menandakan segmen laluan; dalam nilai pertanyaan ia mestilah %2F. Ampersand memisahkan parameter; & dalam nilai memerlukan %26. Aksara tidak terpelihara tidak memerlukan pengekodan—sempang kekal sebagai sempang. Piawaian URL memastikan penghuraian yang betul. Menguji dengan URL pengekod & penyahkod: memasukkan "hello/world" dengan encodeURIComponent menghasilkan "hello%2Fworld"; dengan encodeURI ia mengekalkan garis miring.

Tidak terpelihara: huruf, digit, sempang, noktah, garis bawah dan tilde — aksara yang tidak memerlukan pengekodan dan tidak boleh dikodkan

Pengekodan peratus menggunakan %HH dengan HH ialah tatatanda perenambelasan. ASCII huruf A (kod 65) menjadi %41. Non-ASCII é memerlukan pengekodan UTF-8: é (U+00E9) menjadi %C3%A9. Piawaian moden menyatakan UTF-8 secara seragam merentas pelayar.

URL yang lengkap memerlukan sintaks struktur utuh; nilai pertanyaan memerlukan aksara simpanan dalaman yang tidak berbahaya. Parameter pertanyaan ?q=R&D hendaklah mengekod & sebagai %26 jika manual, jika tidak ampersand menjadi pemisah. Nilai dengan garis miring ke hadapan menjadi %2F dalam mod komponen. Pengekodan komponen (encodeURIComponent) mengendalikan ini dengan mengekodkan segala-galanya kecuali huruf, digit dan - _ . ! ~ * ' ( ). Pengujian menunjukkan perbezaan antara kaedah dengan jelas.

Terpelihara: gen-delim dan sub-delim — dua kumpulan, ahli mereka dan peranan struktur mereka

Rentetan pertanyaan menunjukkan sebab aksara tersimpan penting. Ampersand memisahkan pasangan kunci=nilai: ?utm_source=email&utm_campaign=sale bermaksud dua parameter. Di dalam nilai, ampers yang tidak terlepas dan menamatkan pasangan itu. Equals memisahkan kunci daripada nilai. Penghuraian berlaku pada berbilang lapisan; masing-masing menggunakan peraturan yang sama.

Aksara yang memerlukan pengekodan dalam nilai pertanyaan termasuk ampersand, sama, cincang, tanda soal, ruang dan huruf bukanASCII. Hash adalah paling licik: #apa-apa sahaja menjadi pengecam serpihan, tidak pernah dihantar ke pelayan. Nama kempen yang berakhir dengan cincangan kehilangan segala-galanya selepas itu sebelum permintaan meninggalkan pelayar. Ruang mesti menjadi %20. Pengujian dengan pengekod & penyahkod URL menunjukkan mod komponen dan borang. Memahami kedudukan menentukan keperluan pengekodan.

Apabila aksara yang dikhaskan mesti dikodkan — sahaja apabila ia akan disalah anggap sebagai pembatas, komponen demi komponen

Pengekodan peratus berterusan dalam RFC 3986. Set yang tidak ditempah kekal kecil memastikan mudah alih. Aksara unreserved yang dikodkan peratus boleh menyahkod tanpa perubahan makna. Penyahkodan %41 kepada A adalah betul kerana A tidak terpelihara. Menyahkod %2F kepada / menukar makna apabila slash ialah data, bukan pemisah. RFC 3986 bahagian normalisasi 6 merangkumi pendekatan sintaksis.

Watak terpelihara dalam kedudukan yang berbeza mempunyai peranan yang berbeza. Kolon dalam skema markah skema: sempadan kuasa; titik bertindih dalam info pengguna ialah data. Tanda soal membuka bahagian pertanyaan; slash dalam nilai pertanyaan adalah literal. Hash menandakan serpihan bermula. Kedudukan menentukan keperluan pengekodan. Rentetan pertanyaan membawa nilai yang merupakan URI sendiri. Pengekodan ubah hala URL seperti https://example.com/page?param=value sebagai parameter memerlukan pengekodan garis miring dan titik bertindih kepada %2F dan %3A. Konteks mentakrifkan aksara selamat sentiasa.

Contoh yang berfungsi: mengelaskan setiap aksara URL sebenar — tidak disimpan, dikhaskan sebagai pembatas, dikhaskan sebagai data

RFC 1738 (1994) menganggap banyak watak tidak selamat. Memandangkan penggunaan diseragamkan pada UTF-8, standard kemudian melonggarkan sekatan. Tilde (~) menunjukkan evolusi: RFC 1738 diperlukan %7E, RFC 2396 (1998) mengalihkan tilde ke unreserved, RFC 3986 disahkan status tidak terpelihara. Evolusi mencerminkan pelajaran penggunaan. Piawaian mengekalkan keserasian ke belakang.

RFC normalisasi membenarkan penyahkodan aksara tidak dikodkan peratusan yang tidak diperlukan. %41 selamat dinormalisasi kepada A. Aksara tersimpan yang dikodkan seperti %2F tidak pernah menyahkod; perubahan makna memecahkan struktur. Konsensus moden menggunakan RFC 3986 sebagai garis dasar rujukan. URL pengekod & penyahkod mengikuti RFC 3986 sepanjang, menawarkan rujukan tetap berasingan daripada gelagat pelayar. WHATWG URL Standard menambah set pengekodan khusus komponen melebihi RFC. Piawaian wujud bersama: RFC 3986 untuk penghuraian URL umum, WHATWG untuk pelayar web. Perpustakaan berbeza; semak dokumentasi.

Panduan penormalan dalam bahagian 6 — kes hex, penyahkodan tidak terpelihara dan peraturan segmen laluan

Menguji terhadap RFC 3986 memastikan URL berfungsi merentas perisian yang menjangkau beberapa dekad. URL pengekod & penyahkod memberikan garis dasar pengekodan RFC 3986 untuk digunakan pada komponen yang dibina. Baca dokumentasi standard yang menerangkan setiap keputusan pengekodan dalam perpustakaan URL. WHATWG URL dibina pada RFC 3986 daripada menggantikannya sepenuhnya. Membina URL untuk pelayar umum? Ikuti RFC 3986; pelayar menggunakan peraturan WHATWG di atas. Sistem lama? Uji pelaksanaan sebenar. Menormalkan untuk storan? Gunakan RFC 3986 secara konsisten. Memahami perbezaan reserved/unreserved memberitahu anda watak yang selamat.

URL pengekodan bukan pembersihan keselamatan. Setiap konteks—SQL, HTML, JavaScript, URI—memerlukan pengekodan outputnya sendiri. Pengekodan peratus melindungi struktur URL sahaja. Gunakan pertahanan kanan pada lapisan kanan.

Perkara ini tidak meliputi — WHATWG URL set pengekodan berbeza Standard dan pengendalian IRI

RFC 2396 (1998) memperjelas set aksara dengan lebih teliti daripada RFC 1738. Ia merasmikan aksara tersimpan yang menyajikan struktur URI dan tidak terpelihara sebagai data literal. Unreserved dikembangkan termasuk sempang, noktah, garis bawah, tilde atas takrifan asal. RFC 2396 memperkenalkan perbezaan antara gen-delims (:, /, ?, #, [, ], @) dan sub-delims (!, $, &, ', (, ), *, +, ,, ;, =). Setiap kumpulan mempunyai peranan struktur yang berbeza dalam URL. Penamaan menjelaskan watak terpelihara terbahagi kepada dua kumpulan. Mengetahui nama membantu perbincangan teknikal.

RFC 3986 (2005) ialah rujukan moden. Ia disimpan reserved/unreserved perbezaan tetapi notasi dipermudahkan. Badan piawai tidak memecahkan web secara retroaktif. Encode dengan sengaja mengetahui standard anda. URL pengekod & penyahkod menyediakan rujukan RFC 3986.

Bawa pulang: standard adalah pendek dan tepat — cara pengekod & penyahkod URL dua mod sepadan dengan pengekodan data berbanding mengekalkan pembatas

Memilih piawaian bergantung pada konteks. Membina URL untuk pelayar umum? Ikut RFC 3986; pelayar terpakai WHATWG peraturan. Sistem lama? Uji pelaksanaan sebenar. Menormalkan untuk storan? Mohon RFC 3986 secara konsisten. Peraturan pengekodan peratus berkembang daripada konservatif RFC 1738 melalui dijelaskan RFC 2396 dan RFC 3986 kepada berlapis WHATWG URL Standard. Setiap generasi mencerminkan pengalaman. Pembina moden mengikuti RFC 3986 atau WHATWG secara kontekstual. URL lama dan baharu wujud bersama memerlukan pemikiran keserasian. Memahami kategori menghalang kesilapan pengekodan.

Sahkan pengekodan URL dengan betul sebelum penggunaan. URL pengekod & penyahkod menunjukkan RFC 3986 peraturan hujung ke hujung. Lihat nilai heks yang tepat dan fahami aksara yang mengekod. Gunakan alat ini apabila membina URL dengan menggabungkan kepingan. RFC 3986 set aksara partisi kategori tersimpan dan tidak terpelihara untuk penghuraian URI yang konsisten.