2012-07-23 39 views
7

No tengo problemas con la codificación de caracteres.Bases de datos, codificación de caracteres, archivos PDF y XML

La situación

se carga un archivo que se convierte en XML. La codificación de caracteres de este archivo varía, sin embargo, pueden aparecer citas inteligentes, entidades y varios ASCII. Una vez que este archivo se convierte a XML, se almacena en una base de datos. A petición del usuario, el XML puede extraerse de la base de datos y convertirse en una matriz donde luego se crea en un PDF.

El problema

codificación de caracteres. Desde el principio, la codificación de caracteres ha jugado un gran problema. Me gustaría saber;

  • Qué codificación de caracteres generalmente cubre todo el "espectro". Por ejemplo, un ° que no se reconoce al analizar XML o una cita inteligente (). La cita inteligente se convertirá en ’, etc., etc.
  • Cómo almacenar XML en una base de datos. La encriptación es una posibilidad, sin embargo la codificación de la base de datos es donde me estoy perdiendo.
  • Cómo obtener las entidades, comillas inteligentes (y otros caracteres que pueden causar un problema) para aparecer correctamente en una base de datos y con un Å en frente de cosas.

Los intentos de un trabajo alrededor

me han hecho diversas funciones que "intento" para resolver mi problema - la conversión de algunos caracteres en otro. Sin embargo, supongo que este es el completamente manera incorrecta de hacerlo y debería estar cambiando la codificación de caracteres.

/* 
* 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'); 
} 

En última instancia, mi problema reside en el hecho de que yo no sé la codificación del archivo que se sube. Tuve una idea de switch que intenta convertir caracteres en algo más de base de datos y "compatible con PDF". Sin embargo, mucha búsqueda en Google ha resultado en soluciones de trabajo amargas o matrices que una cosa a otra. ¿Es esta realmente la solución?

Cualquier consejo, soluciones o dedos apuntados en una mejor dirección son todos útiles y muy apreciados. Gracias.

+0

hola amigo, tengo un problema similar ¿llegaste a algún lado con esto? – Drakoumel

Respuesta

0

La detección de la codificación de un archivo es un problema difícil, UTF es fácil porque tiene una lista de materiales al principio, pero de lo contrario es casi imposible determinar correctamente el tipo de codificación.

Sin embargo, si el XML está formateado correctamente, debe tener la codificación incrustada en él, y el analizador debe manejarlo correctamente. Veo que está haciendo una conversión de UTF-8 a UTF-32, esto no va a ayudar en absoluto porque simplemente hace que la cadena sea un poco más grande, sin embargo, no cambia los puntos de código utilizados para codificar los caracteres.

Por lo tanto, debe poder pedirle a su analizador XML la codificación del archivo, luego cámbielo de UTF-8 (o 32) antes de almacenarlo o procesarlo.

1

Si fuera usted, haría una de estas dos cosas.Yo solo almacenaba las cosas sin ninguna codificación en la base de datos (como una burbuja) para que la codificación de la base de datos no entrara en absoluto.

La otra cosa que puede hacer es almacenar la información en la base de datos. Simplemente almacénelo en un archivo (nombre el archivo como hash de algo que será único), y luego simplemente haga una tabla en la base de datos que almacena la ubicación del archivo que tiene el xml. Luego puede servir el xml directamente desde el archivo.

Cuestiones relacionadas