2015-02-09 11 views
6

Sto cercando di memorizzare molti dati in un parametro hash dell'URL senza superare i limiti di caratteri dell'URL.Compressione stringa JavaScript per il parametro hash dell'URL

Esistono metodi convenzionali di compressione della lunghezza della stringa che possono essere decodificati su un altro caricamento di pagina?

Ho visto LZW encoding utilizzato per soluzioni simili, tuttavia i caratteri speciali sarebbero validi per questo utilizzo?

+0

Una soluzione alternativa se si dispone di un DB è quella di memorizzare la stringa non compressa, dargli un ID e utilizzarlo nell'hash. Il client può quindi recuperare gli argomenti iniziali tramite una richiesta AJAX. Questo è un ulteriore viaggio di andata e ritorno, ma potrebbe essere accettabile. Lo stato è condivisibile tra i clienti? In caso contrario, è possibile archiviare eventi nel 'localStorage'. – plalx

+0

@plalx Grazie, lo stato è condivisibile tra i client, ma purtroppo non ci sono requisiti per lo storage back-end. – Curt

+0

Il problema con un algoritmo di codifica è che non si può essere sicuri di non superare mai il limite, a meno che non si conoscano tutte le combinazioni potenziali e che ciò implichi dati statici. Credo che il livello di compressione potenziale dipenda anche da ciò che stai effettivamente codificando. Per esempio. gzip sembra abbastanza bravo a gestire i frammenti ripetitivi. – plalx

risposta

1

codifica LZW tecnicamente opere; basterà convertire il file binario con codifica LZW in base64 sicuro per URL, in modo che l'output non contenga caratteri speciali. Here's an MDN article on base64 in JavaScript; la variante URL-safe di base64 sostituisce semplicemente + con - e / con _. Naturalmente, non è probabile che tu riduca la dimensione della stringa di molto facendo ciò, a meno che i dati che desideri archiviare siano estremamente comprimibili.

1

È possibile guardare smaz o shoco, che sono progettati per la compressione di stringhe corte. La maggior parte dei metodi di compressione non si arrotola molto bene dopo il limite di lunghezza dell'URL, quindi è necessario un compressore specializzato per questo caso se si prevede di ottenere alcun guadagno. È quindi possibile codificare il risultato binario utilizzando uno schema come Base 64 o una codifica più efficiente che utilizza tutti i caratteri URI-safe.

Problemi correlati