2012-06-19 27 views
8

Estoy trabajando en un proyecto que requiere convertir el correo electrónico html en texto. A continuación se muestra una versión simplificada del código HTML:Convertir la tabla HTML en texto

<table> 
    <tr> 
     <td width="10%"></td> 
     <td width="60%"> test product </td> 
     <td width="20%">5</td> 
     <td width="10%"> £50.00 </td> 
    </tr> 
    <tr> 
     <td></td> 
     <td colspan="3" width="100%"> Project Name: Test Project </td> 
    </tr> 
    <tr> 
     <td width="10%"> </td> 
     <td colspan="2" width="80%"> Page 1 : 01 New York 1.jpg </td> 
     <td width="10%"> £0.00 </td> 
    </tr> 
</table> 

El resultado esperado debería tener este aspecto en un archivo de texto (con columnas alineadas muy bien):

test product          5   £50.00 
Project Name: Test Project                
Page 1 : 01 New York 1.jpg         £0.00 

Mi idea es analizar el contenido HTML DOMDocument. Luego estableceré un ancho predeterminado para la tabla (es decir, 100 espacios) y luego convertiré el ancho de cada columna de% a número de espacios (basado en colspan & width atributo de <td> etiqueta). Luego restaré este ancho de columna a strlen de los datos en cada columna para archivar el número de espacios que necesito para pad_right a la cadena para hacer que todo se alinee verticalmente.

He estado trabajando de esa manera, no se ha archivado lo que quiero, pero me pregunto si es estúpido o si alguien conoce una mejor manera, por favor, ayúdenme.

También en lo que respecta a los idiomas de Multibyte (japonés, coreano, etc.) No creo que mi enfoque funcione porque sus personajes serán más grandes que un espacio y terminará en un desastre.

¿Alguien me puede ayudar, por favor?

+4

Esto solo podría funcionar si el texto se muestra en una fuente monoespaciada. – Roman

+3

¿Eh? Multibyte no (/ should not) toma más espacios en su txtfile. – PeeHaa

+1

¿Qué harás si hay una columna que es más ancha de lo que estás esperando? –

Respuesta

11

Esto es solo una idea.

No reinventar la rueda. La representación de tablas es difícil, lo que hace que las tablas que usan solo texto sean aún más difíciles.

Hay navegadores basados ​​en texto que se pueden usar por línea de comandos, como lince. Puede escribir su tabla html en un archivo, pasar ese archivo al navegador basado en texto y tomar su salida.

Nota: los navegadores basados ​​en texto se utilizan generalmente en un shell, que generalmente se muestra en monoespacio. Esto sigue siendo un requisito previo.

lynx y w3m están disponibles en Windows. Para aclarar la complejidad de un procesador de tablas basado en texto, eche un vistazo a w3m, que es de código abierto. These 3000 lines of code solo hay para mostrar tablas html.

ACTUALIZACIÓN

ejemplo de código:

$table = '<table><tr><td>foo</td><td>bar</td></tr></table>'; //this contains your table 
$html = "<html><body>$table</body></html>"; 

//write html file 
$tmpfname = tempnam(sys_get_temp_dir(), "tblemail"); 

$handle = fopen($tmpfname, "w"); 
fwrite($handle, $html); 
fclose($handle); 

$text = shell_exec("w3m.exe -dump \"$tmpfname\""); 
unlink($tmpfname); 

echo "<pre>$text</pre>"; 

w3m.exe tiene que estar en el directorio de trabajo.

(no lo intenté)

+0

Gracias, el problema es que esta conversión debe ser automática y es una parte del software de nuestra compañía que se ejecuta en un servidor de Windows, así que realmente no puedo instalar Lynx – Olizt

+1

Oh, pensé que era automático. La idea era automatizarlo. PHP escribe el archivo y ejecuta (shell_exec) el navegador. Agregaré un código de ejemplo – Roman

+0

@Olizt ver arriba: "¡lynx y w3m están disponibles en Windows"! – feeela

Cuestiones relacionadas