UltKit

Encode & Decode URL

Jadikan teks selamat untuk diletakkan dalam URL, atau tukar semula jujukan gaya %20 kepada aksara yang boleh dibaca. Alat ini menggunakan encodeURIComponent, encodeURI dan decodeURIComponent pelayar anda sendiri, menyenaraikan parameter pertanyaan dalam jadual dan tidak menghantar apa-apa ke pelayan.

Mod

0 aksara · 0 perkataan · 0 baris

0 aksara · 0 perkataan · 0 baris

Berjalan sepenuhnya dalam tab pelayar ini. Teks Anda tidak pernah dimuat naik atau disimpan.

Apa yang di-escape oleh setiap fungsi

Dikira dengan fungsi pelayar itu sendiri. encodeURIComponent membiarkan huruf, digit dan tanda ini: ! ' ( ) * - . _ ~

AksaraencodeURIComponentencodeURI
(ruang)%20%20
!!!
"%22%22
#%23#
$%24$
%%25%25
&%26&
'''
(((
)))
***
+%2B+
,%2C,
/%2F/
:%3A:
;%3B;
=%3D=
?%3F?
@%40@
[%5B%5B
]%5D%5D
{%7B%7B
}%7D%7D
|%7C%7C
\%5C%5C
^%5E%5E
`%60%60
<%3C%3C
>%3E%3E
~~~
---
___
...
é%C3%A9%C3%A9
€%E2%82%AC%E2%82%AC
😀%F0%9F%98%80%F0%9F%98%80

Percent-encoding dan aksara terpelihara RFC 3986

URL hanya boleh mengandungi set aksara ASCII yang terhad. RFC 3986, spesifikasi sintaks URI tahun 2005, membahagikannya kepada dua kumpulan. Aksara tidak terpelihara (unreserved), iaitu A–Z, a–z, 0–9 dan empat tanda - . _ ~, tidak perlu dikodkan. Aksara terpelihara (reserved) pula mempunyai fungsi: pembatas am : / ? # [ ] @ memisahkan skema, hos, laluan, pertanyaan dan serpihan, manakala sub-pembatas ! $ & ' ( ) * + , ; = memisahkan item di dalamnya, seperti & dan = dalam rentetan pertanyaan. Semua aksara lain, dan mana-mana aksara terpelihara yang digunakan sebagai data biasa, mesti dikodkan dengan kod peratus.

Pengekodan peratus menulis satu bait sebagai % diikuti dua digit heksadesimal. Teks ditukar dahulu kepada UTF-8, jadi ruang menjadi %20, é (dua bait) menjadi %C3%A9 dan emoji menjadi empat kumpulan %XX. Itulah sebabnya carian "café & bar" menjadi caf%C3%A9%20%26%20bar dalam pautan: & dikodkan supaya pelayan tidak menganggapnya sebagai permulaan parameter baharu.

encodeURIComponent, encodeURI dan penyahkodan

encodeURIComponent ialah pilihan yang betul untuk satu bahagian, seperti nilai pertanyaan, segmen laluan atau URL ubah hala yang dihantar sebagai parameter. Ia melepaskan semua aksara kecuali aksara tidak terpelihara dan ! ' ( ) *, yang dibiarkan oleh JavaScript atas sebab sejarah. encodeURI (URL penuh) menganggap inputnya sudah menjadi alamat lengkap dan mengekalkan aksara terpelihara, jadi https://example.com/a b?q=1 hanya dikodkan pada ruangnya. Menggunakan encodeURI pada nilai parameter ialah pepijat klasik: & atau # dalam nilai itu akan kekal dan merosakkan URL.

Nyahkod membalikkan kedua-dua fungsi. Borang HTML yang dihantar dengan GET menggunakan format application/x-www-form-urlencoded yang lebih lama, dengan ruang ditulis sebagai + dan bukan %20; biarkan Anggap + sebagai ruang ditandakan untuk kes itu, dan nyahtandakannya apabila tanda tambah literal penting, seperti dalam nombor telefon. Jika input mengandungi % yang tidak diikuti dua digit heksa, atau bait yang bukan UTF-8 sah, penyahkodan gagal dengan mesej yang jelas dan bukan meneka. Apabila teks mengandungi rentetan pertanyaan, parameternya dipaparkan dalam keadaan dinyahkod dalam jadual di bawah alat ini. Untuk data binari dalam URL, Base64url ialah alternatif biasa.

Soalan lazim

Adakah ruang dalam URL patut ditulis %20 atau tanda tambah?
Dalam laluan dan menurut RFC 3986, ruang ialah %20. Bentuk + hanya bermaksud ruang dalam rentetan pertanyaan yang dikodkan seperti borang HTML, jadi %20 ialah pilihan selamat di mana-mana.
Mengapakah URL saya mengandungi %2520?
Ia dikodkan dua kali. Lintasan pertama menukar ruang kepada %20, dan yang kedua mengodkan % itu sendiri sebagai %25. Nyahkod sekali untuk membuang lapisan tambahan, dan kodkan nilai di satu titik sahaja dalam kod anda.
Aksara manakah yang tidak pernah perlu percent-encoding?
Set tidak terpelihara dalam RFC 3986: huruf A hingga Z dalam kedua-dua huruf besar dan kecil, digit 0 hingga 9, serta sempang, titik, garis bawah dan tilde.
Bolehkah URL mengandungi huruf bukan Inggeris tanpa pengekodan?
Pelayar memaparkannya, tetapi dalam penghantaran setiap aksara bukan ASCII dalam laluan atau pertanyaan dihantar sebagai UTF-8 berkod peratus. Nama domain menggunakan sistem berasingan, Punycode, yang menukarnya kepada label xn--.
Mengapakah penyahkodan melaporkan jujukan yang rosak?
Teks mengandungi % yang tidak diikuti dua digit heksadesimal, seperti "100%" secara literal, atau bait dinyahkod kepada UTF-8 yang tidak sah. Kodkan tanda % yang sesat sebagai %25 sebelum menyahkod.