Codificatore percentuale RFC 3986
Con la regola rigorosa della RFC 3986, hello world!'()* diventa hello%20world%21%27%28%29%2A: restano invariati solo lettere, cifre, trattino, punto, underscore e tilde. In decodifica, una sequenza percentuale incompleta interrompe l’operazione invece di inventare caratteri. Gratis nel Suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Testo
- hello world!'()*
- Modalità di calcolo
- Encode
- Risultato
- hello%20world%21%27%28%29%2A
- Lunghezza
- 28
- Forma standard
- RFC 3986
- Non riservati
- A-Z a-z 0-9 - . _ ~
RFC 3986 definisce la grammatica URI moderna e l’insieme esatto di caratteri non riservati che possono comparire senza codifica percentuale: lettere, cifre, trattino, punto, underscore e tilde. Questa capacità applica la mappa rigorosa RFC 3986 in entrambi i sensi: encode trasforma ogni byte UTF-8 non non-riservato in %HH maiuscolo, e decode ripristina il testo semplice fallendo subito su sequenze percentuali incomplete o non esadecimali.
Come la codifica RFC 3986 differisce da encodeURIComponent
La codifica percentuale sostituisce gli ottetti non consentiti con un segno percentuale e due cifre esadecimali così una stringa può viaggiare in sicurezza dentro un componente URI. La sezione 2.3 di RFC 3986 nomina l’insieme non riservato—ALPHA, DIGIT, trattino, punto, underscore e tilde—e afferma che questi caratteri non devono essere codificati in percentuale quando si producono dati.
Ogni altro ottetto, inclusi gen-delims e sub-delims riservati e tutti i byte UTF-8 non ASCII, va codificato quando il valore è trattato come dato opaco. encodeURIComponent di JavaScript usa un insieme non escape più largo che mantiene come letterali anche esclamativo, apostrofo, parentesi aperta e chiusa e asterisco. Questa scelta rispecchia il comportamento storico dei form del browser ma diverge dalla codifica rigorosa di componente RFC 3986 e da molte librerie server in Python, Go, Java o Rust che lasciano soli solo i sei segni non riservati.
Il guasto pratico è sottile: una firma o una chiave di cache costruita da «hello! world» può fare hash diverso se un lato emette hello! world e l’altro hello%21world.
Questo strumento applica sempre la mappa RFC in encode, con hex maiuscolo, così caratteri multi-byte come café diventano caf%C3%A9 e uno spazio diventa %20, mentre ! ' ( ) * diventano %21 %27 %28 %29 %2A. Il decode accetta cifre hex maiuscole o minuscole, verifica che ogni percentuale sia seguita da esattamente due cifre hex e ricostruisce testo UTF-8.
Cosa invia Lei e cosa riceve indietro
Invii un campo stringa obbligatorio chiamato text e un campo mode opzionale. Il modo encode esegue l’escape percentuale del testo secondo la regola non riservata di RFC 3986 e restituisce la stringa trasformata in result. Il modo decode valida ogni sequenza percentuale, inverte la codifica e restituisce testo UTF-8 semplice in result.
I fallimenti di validazione non consumano il saldo prepagato. Controlli classici: codificare una frase con spazi ed esclamativi per vedere %20 e %21 affiancati, decodificare caf%C3%A9%21 di nuovo in café!, e rifiutare una stringa che termina con percentuale nuda o contiene %ZZ.
Dove la codifica rigorosa RFC 3986 compare nel lavoro reale
I servizi backend che costruiscono URL di redirect firmati, stringhe di parametri OAuth 1.0 o richieste canoniche HMAC spesso richiedono codifica percentuale conforme a RFC 3986 piuttosto che a encodeURIComponent del browser, perché le stringhe base di firma trattano ! ' ( ) * come caratteri da escapare.
Client mobili e desktop fuori dall’ecosistema JavaScript in genere includono librerie che già seguono la regola solo non riservati; un middleware Node che usasse encodeURIComponent per gli stessi valori produrrebbe fallimenti di firma intermittenti solo quando un titolo di prodotto o un nome visualizzato contiene un apostrofo o una parentesi. Gli ingegneri di supporto incollano stringhe semi-codificate da ticket e log e servono un percorso di decode che fallisca in modo esplicito su escape troncati invece di inventare caratteri.
Gli autori di curricula di fondamenti web vogliono una pagina dedicata alla codifica percentuale RFC 3986 con l’insieme non riservato esplicito invece di seppellire l’argomento sotto un codificatore URL generico o uno strumento Base64, perché l’intento di ricerca e la differenza !'() * sono ciò che cercano studenti e integratori. Gli ingegneri di localizzazione verificano che le lingue multi-byte facciano andata e ritorno senza mojibake.
Se Le serve la semantica encodeURIComponent, una codifica URI completa leggera che preservi i delimitatori strutturali, Base64 o generazione di slug, li tratti come intenti di ricerca e landing distinti invece di sovraccaricare questa pagina del codificatore RFC 3986.
Casi d'uso
OAuth e stringhe di query firmate
Codifichi in percentuale i valori di parametro con l’insieme non riservato rigoroso RFC 3986 così le stringhe base HMAC e OAuth coincidono con peer non JavaScript che escapano ! ' ( ) *.
Decodificare frammenti URI da log o incollati
Decodifichi frammenti codificati in percentuale da log e ticket in UTF-8 leggibile, con fallimenti rigidi su sequenze percentuali incomplete o non esadecimali.
Domande frequenti
In che cosa differisce da encodeURIComponent?
encodeURIComponent lascia ! ' ( ) * non escape. Questo strumento segue solo i caratteri non riservati RFC 3986 (A–Z a–z 0–9 - . _ ~) e codifica in percentuale quei quattro sub-delims come %21 %27 %28 %29 %2A.
Posso codificare e decodificare?
Sì. Imposti mode su encode (predefinito) per l’escape percentuale del testo semplice secondo RFC 3986, oppure mode su decode per recuperare testo UTF-8 da una stringa codificata in percentuale.
Le cifre hex in encode sono maiuscole o minuscole?
L’encode emette cifre esadecimali maiuscole (%2A e non %2a), forma preferita in RFC 3986. Il decode accetta hex maiuscolo e minuscolo.
Quanto costa il codificatore percentuale RFC 3986?
Lo strumento browser è gratuito e gira in locale.
Come si codifica uno spazio secondo la RFC 3986?
Lo spazio diventa %20, mai il segno più. Allo stesso modo il punto esclamativo diventa %21 e l’apostrofo %27, perché la RFC 3986 lascia invariati soltanto lettere, cifre, trattino, punto, underscore e tilde.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/enc/url-rfc3986 \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"hello world!'\''()"}'const res = await fetch("https://api.kit.forhosting.com/enc/url-rfc3986", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "hello world!'()"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/url-rfc3986",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "hello world!'()"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/url-rfc3986", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"hello world!\'()"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"hello world!'()"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/url-rfc3986", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"text": "hello world!'()"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.url_rfc3986",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Molti strumenti quotidiani seguono encodeURIComponent di JavaScript, che lascia deliberatamente non escape punti esclamativi, apostrofi, parentesi e asterischi—caratteri che RFC 3986 classifica come sub-delims e che gateway rigorosi, firmatari OAuth e client HTTP multi-linguaggio si aspettano spesso come %21 %27 %28 %29 %2A. La usi quando il contratto richiede «percent-encode secondo RFC 3986», quando deve allinearsi a un peer non JavaScript che conserva solo i sei segni di punteggiatura non riservati, o quando le serve un unico strumento browser gratuito e un’API a pagamento che concordano byte per byte sulla stessa funzione pura. Il prezzo delle chiamate API riuscite è la base pubblicata di $0.002 per elemento; i fallimenti di validazione non vengono addebitati.
Come la codifica RFC 3986 differisce da encodeURIComponent
Una percentuale finale nuda, una sequenza come %G1 o UTF-8 non valido dopo l’espansione sollevano invalid_input con messaggio di posizione invece di spazzatura a metà decodifica. Il percorso è lavoro puro su stringhe, senza rete, senza semi casuali e senza orologio di parete, quindi input identici producono sempre lo stesso JSON. Il prezzo API riuscito è la base pubblicata di $0.002 per elemento.
Cosa invia Lei e cosa riceve indietro
Se mode è omesso, encode è il predefinito così un solo payload resta utile. La risposta ripete mode e il text originale, include result e la length di result, e etichetta il contratto con standard impostato a RFC 3986, un breve riepilogo unreserved e also_escaped che elenca i quattro caratteri sub-delim che distinguono questa mappa da encodeURIComponent. Text mancante, oggetti non stringa, valori mode non supportati, stringhe più lunghe del massimo documentato, escape percentuali incompleti, cifre non hex dopo una percentuale ed errori host su UTF-8 decodificato non valido falliscono con invalid_input e un messaggio chiaro in inglese. Il prezzo API riuscito è la base pubblicata di $0.002 per elemento, allineata agli altri codificatori di livello parse del catalogo.
Dove la codifica rigorosa RFC 3986 compare nel lavoro reale
Poiché questa capacità è un motore parse puro, il prezzo API è la base pubblicata di $0.002 per elemento riuscito e la validazione fallita non consuma saldo.
Casi di integrazione
Fixture golden multi-linguaggio
Generi vettori di encode e decode su cui le librerie URL di Python, Go, Java e Rust concordano, inclusi i caratteri sub-delim che i browser spesso lasciano letterali.
Domande tecniche
Cosa succede se una sequenza percentuale è malformata?
Il decode fallisce con invalid_input, indicando posizione e escape errato (ad esempio un % incompleto o cifre non hex). Nessun addebito per i fallimenti di validazione.