Eviti le righe vedove con uno spazio unificatore
Lo strumento contro le righe vedove migliora il ritmo visivo di titoli, introduzioni, schede, didascalie e altri testi che richiedono una composizione accurata.
Esegui gratis nel browser
Inserisce uno spazio unificatore tra le ultime due parole di ogni paragrafo, invitando browser e motori di impaginazione a mantenerle sulla stessa riga. Le interruzioni di paragrafo, le parole, la punteggiatura e gli spazi esistenti rimangono intatti. La trasformazione è deterministica e idempotente: lo stesso contenuto può attraversare più volte un flusso editoriale automatizzato senza accumulare ulteriori modifiche.
Perché lo spazio unificatore finale migliora la tipografia
Una vedova è una riga finale troppo breve, spesso composta da una sola parola, lasciata in fondo a un paragrafo o sotto un titolo. Può far sembrare casuale una scheda, un’apertura o un blocco editoriale altrimenti equilibrato, soprattutto quando un layout responsivo cambia larghezza sui diversi dispositivi. Lo strumento applica un accorgimento tipografico semplice e consolidato: sostituisce l’ultimo carattere di spaziatura ordinaria prima della parola finale con uno spazio Unicode unificatore. Le ultime due parole si comportano quindi come una coppia quando il browser o un altro motore compatibile decide le interruzioni di riga. Il testo non viene riscritto, riassunto o ripunteggiato. Le righe vuote tra i paragrafi restano esattamente al loro posto e gli eventuali spazi aggiuntivi prima dell’ultima parola vengono conservati, eccetto il carattere reso non separabile. I paragrafi privi di una coppia finale adatta non cambiano. Poiché uno spazio unificatore già presente non viene sostituito nuovamente, elaborazioni ripetute danno lo stesso risultato senza aggiungere caratteri invisibili.
Come preparare e controllare il testo
Invii il contenuto nel campo text esattamente come deve apparire per ogni altro aspetto. Separi i paragrafi con una o più righe vuote: tali separatori vengono conservati nell’output. In ogni paragrafo il trasformatore esamina l’ultima riga e individua l’ultimo elemento diverso da uno spazio. Se è preceduto da uno spazio ordinario o da una tabulazione, l’ultimo carattere di quella sequenza diventa unificatore. La punteggiatura collegata alla parola finale rimane collegata, perciò un punto, un punto interrogativo, una virgoletta o una parentesi di chiusura non richiedono interventi particolari. Dopo l’elaborazione, copi il testo restituito nel sistema di destinazione e lo controlli alle larghezze rilevanti. Uno spazio unificatore condiziona l’andata a capo, ma non garantisce una composizione perfetta se il contenitore è estremamente stretto o le ultime parole sono molto lunghe. Verifichi inoltre che editor, CMS, motore di template o database conservino Unicode senza normalizzare in seguito il carattere come spazio ordinario.
Uso nei flussi di pubblicazione
La capacità è adatta come ultima fase deterministica di formattazione, dopo l’approvazione del testo e prima del rendering. Un’integrazione CMS può elaborare titolo e sintesi quando viene pubblicata una voce, mentre un generatore di siti statici può applicarla ai campi scelti durante la compilazione. I team email possono proteggere le intestazioni prima di inserirle nei modelli e i design system possono usare il risultato per titoli di schede che vanno spesso a capo. Applichi la trasformazione in modo selettivo, non indiscriminatamente a codice sorgente, testo preformattato, URL o dati in cui ogni spazio ha valore semantico. Memorizzi il testo restituito se il canale accetta Unicode oppure converta lo spazio unificatore nella rappresentazione di escape appropriata solo se un formato successivo lo richiede esplicitamente. L’API addebita $0.002 per richiesta, mentre l’esecutore nel browser offre localmente la stessa logica deterministica. Senza rete, modelli, valori casuali o orologi, input identici producono sempre output identici.
Casi d'uso
Rifinisca i titoli responsivi
Mantenga unite le ultime due parole di aperture e schede quando il layout si restringe su desktop e dispositivi mobili.
Prepari i contenuti per il CMS
Applichi una protezione coerente a titoli, sommari, didascalie o campi promozionali durante la pubblicazione.
Migliori la tipografia delle email
Protegga la coppia finale di intestazioni e brevi paragrafi prima di inserire il contenuto in un modello email.
Domande frequenti
Che cosa modifica lo strumento?
Trasforma in spazio Unicode unificatore l’ultimo carattere di spaziatura ordinaria prima della parola finale di ogni paragrafo idoneo.
Le interruzioni di paragrafo vengono conservate?
Sì. I separatori formati da righe vuote e tutte le parole rimangono esattamente invariati.
Posso elaborare due volte lo stesso testo?
Sì. La trasformazione è idempotente: un testo già protetto da uno spazio unificatore non cambia nuovamente.
Elimina sempre tutte le righe finali corte?
No. Mantiene unita la coppia finale, ma l’andata a capo effettiva dipende dal carattere, dalla larghezza e dal motore di layout.
Quanto costa l’API?
Ogni richiesta API costa $0.002. La versione per browser esegue localmente la stessa logica.
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/str/prevent-widows \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"A clear headline should never leave one word behind.\n\nThis second paragraph is protected too."}'const res = await fetch("https://api.kit.forhosting.com/str/prevent-widows", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "A clear headline should never leave one word behind.\n\nThis second paragraph is protected too."
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/prevent-widows",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "A clear headline should never leave one word behind.\n\nThis second paragraph is protected too."
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/prevent-widows", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"A clear headline should never leave one word behind.\\n\\nThis second paragraph is protected too."}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"A clear headline should never leave one word behind.\n\nThis second paragraph is protected too."}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/prevent-widows", 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": "A clear headline should never leave one word behind.\n\nThis second paragraph is protected too."
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.prevent_widows",
"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.
Limiti
max_chars | 200000 |
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. |