2012-07-23 14 views
7

Ho pochi problemi con la codifica dei caratteri.Database, codifica dei caratteri, PDF e XML

La situazione

un file viene caricato che viene convertito in XML. La codifica dei caratteri di questo file varia, tuttavia possono apparire virgolette intelligenti, entità e vari ASCII. Una volta convertito in XML, questo file viene archiviato in un database. Su richiesta dell'utente, XML può essere estratto dal database e convertito in un array dove viene quindi creato in un PDF.

Il problema

codifica dei caratteri. Fin dall'inizio, la codifica dei caratteri ha avuto un grosso problema. Mi piacerebbe sapere;

  • Quale codifica di carattere generalmente copre l'intero "spettro". Ad esempio, un ° che non viene riconosciuto durante l'analisi dell'XML o di un preventivo intelligente (). La citazione intelligente diventerà ’, ecc. Ecc.
  • Come memorizzare XML in un database. La crittografia è una possibilità, tuttavia la codifica del database è dove mi sto perdendo.
  • Come ottenere le entità, virgolette intelligenti (e altri caratteri che possono causare problemi) per apparire correttamente in un database e con un Å di fronte a roba.

I tentativi di un lavoro in giro

mi hanno fatto varie funzioni che "il tentativo" per risolvere il mio problema - convertire alcuni caratteri in un altro. Tuttavia, presumo che questo sia il interamente modo sbagliato di farlo e dovrei cambiare la codifica dei caratteri.

/* 
* Converts smart quotes to ascii 
*/ 
function convert_smart_quotes($string) { 
    $string = iconv("UTF-8", "UTF-32", $string); 
    $string = mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-32'); 
    $string = str_replace('', '', $string); 
    $search = array('‘', '’', '“', '”', '—'); 
    $replace= array("'", "'", '"', '"', '-'); 
    $string = str_replace($search, $replace, $string); 
    return $string; 
} 
/* 
* Converts some entities to an ISO format? 
* 
* Example : ° => ° 
*/ 
function entity_to_iso($string) { 
    return html_entity_decode($string, ENT_QUOTES & ~ENT_COMPAT, 'ISO-8859-1'); 
} 

In ultima analisi, il mio problema risiede nel fatto che io non conosco la codifica del file che viene caricato. Ho avuto un'idea di un switch che tenta di convertire i caratteri in qualcosa di più database e "PDF friendly". Tuttavia, molto Google ha portato ad un amaro aggiramento del lavoro o agli array che str_replace una cosa all'altra. Questa è davvero la soluzione?

Qualsiasi consiglio, soluzione o dito puntato in una direzione migliore sono tutti utili e molto apprezzati. Grazie.

+0

ciao amico, ho un problema simile sei arrivato ovunque con questo? – Drakoumel

risposta

0

Rilevare la codifica di un file è un problema difficile, UTF è facile perché ha una distinta base all'inizio, ma altrimenti è quasi impossibile determinare correttamente il tipo di codifica.

Tuttavia, se l'XML è formattato correttamente, dovrebbe avere la codifica incorporata in esso e il parser dovrebbe gestirlo bene. Vedo che stai facendo una conversione da UTF-8 a UTF-32, questo non aiuterà affatto perché rende la stringa un po 'più grande, tuttavia non cambia i punti di codice usati per codificare i caratteri.

Quindi dovresti essere in grado di chiedere al parser XML la codifica del file, quindi cambiarlo da quello a UTF-8 (o 32) prima di archiviare e/o elaborare.

1

Se fossi in te, farei una delle due cose.Vorrei semplicemente archiviare le cose senza alcuna codifica nel database (come un blob) in modo che la codifica del database non vi entri affatto.

L'altra cosa che puoi fare è non memorizzare affatto le informazioni nel database. È sufficiente archiviarlo in un file (assegnare al file un hash di qualcosa che sarà univoco), quindi creare semplicemente una tabella nel database che memorizza il percorso del file che contiene xml. Quindi puoi semplicemente pubblicare l'xml direttamente dal file.

Problemi correlati