URL Encoding
URL Encoding (Percent-Encoding)
Metode untuk merepresentasikan karakter khusus dan karakter non-ASCII dalam URL dengan mengganti karakter tersebut dengan tanda persen (%) diikuti oleh dua digit heksadesimal yang merepresentasikan byte UTF-8-nya.
Detail Teknis
URL encoding (RFC 3986) menggantikan karakter yang tidak aman dengan %HH di mana HH adalah byte UTF-8 heksadesimal. Karakter yang tidak dicadangkan (tidak ter-encode): A-Z, a-z, 0-9, -, _, ., ~. Karakter yang dicadangkan (di-encode saat digunakan sebagai data): :, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =. Spasi menjadi %20 dalam URL atau + dalam data form (application/x-www-form-urlencoded). Karakter Unicode pertama-tama di-encode ke byte UTF-8, kemudian setiap byte di-percent-encode: 'ñ' → %C3%B1 (2 byte UTF-8). Double-encoding terjadi ketika string yang sudah ter-encode di-encode lagi: %20 → %2520. API JavaScript: encodeURIComponent() (encode komponen), encodeURI() (mempertahankan delimiter URI). Kerentanan umum: path traversal melalui %2F (/) atau %00 (null byte).
Contoh
```javascript
// URL encode/decode
encodeURIComponent('hello world & more');
// → 'hello%20world%20%26%20more'
decodeURIComponent('hello%20world');
// → 'hello world'
// Build query string
const params = new URLSearchParams({ q: 'pdf merge', page: '1' });
params.toString(); // 'q=pdf+merge&page=1'
```