2012-06-19 22 views
8

Pracuję nad projektem, który wymaga konwersji e-maili HTML na tekst. Poniżej jest uproszczoną wersją kodu HTML:Konwertuj tabelę HTML na tekst

<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> 

Oczekiwany rezultat powinien wyglądać w pliku tekstowym (z kolumny ustawione ładnie):

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

Mój pomysł jest analizowanie zawartości HTML przez DOMDocument. Wtedy ustawiania zadanej szerokości na stole (tj .: 100 miejsc), a następnie konwersję szerokość każdej kolumnie z% do szeregu pomieszczeń (na colspan & width atrybutu <td> tag). Następnie odejmę te kolumny o szerokości strlen danych w każdej kolumnie, aby zarchiwizować liczbę pól, które muszę wprowadzić, pad_right do ciągu, aby wszystko wyrównać w pionie.

pracuję w ten sposób, nie zostało zarchiwizowane, co chcę, ale po prostu zastanawiasz się, czy jest głupi czy ktoś zna lepszy sposób proszę mi pomóc.

Również jeśli chodzi o języki Wielobajtowe (japoński, koreański itp.) ... nie sądzę, że moje podejście zadziała, ponieważ ich postacie będą większe niż jedna przestrzeń i skończy się bałagan.

Czy ktoś może mi pomóc?

+4

Może to działać tylko wtedy, gdy tekst jest wyświetlany czcionką o stałej szerokości. – Roman

+3

Huh? Multibajt nie (nie powinien) zabiera więcej spacji do pliku txt. – PeeHaa

+1

Co zrobisz, jeśli kolumna będzie szersza niż oczekiwana? –

Odpowiedz

11

To tylko pomysł.

Nie wymyślaj ponownie koła. Renderowanie tabel jest trudne, a renderowanie tabel przy użyciu tylko tekstu jest jeszcze trudniejsze.

Istnieje textbased przeglądarek, które mogą być wykorzystywane przez linii poleceń, jak ryś. Możesz zapisać swoją tabelę html w pliku, przekazać ten plik do przeglądarki tekstowej i pobrać jego dane wyjściowe.

UWAGA: textbased przeglądarek są powszechnie stosowane w powłoce, która zazwyczaj wyświetla w monospace. To pozostaje warunkiem wstępnym.

ryś i w3m są zarówno dostępne w systemie Windows. Aby wyjaśnić złożoność renderowania tabel opartych na tekście, spójrz na w3m, który jest open source. These 3000 lines of code służą tylko do wyświetlania tabel html.

UPDATE

przykładowy kod:

$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 musi być w katalogu roboczym.

(nie próbowałem)

+0

Dzięki, problem polega na tym, że konwersja musi być automatyczna i jest częścią naszego oprogramowania firmy, które jest uruchamiane na serwerze Windows, więc nie mogę zainstalować Lynx – Olizt

+1

Och, myślałem, że to automatyczne. Pomysł polegał na automatyzacji. PHP zapisuje plik i wykonuje (shell_exec) przeglądarkę. Dodam kod exmaple – Roman

+0

@Olizt patrz wyżej: "Lynx i w3m są dostępne w Windowsie"! – feeela

Powiązane problemy