2012-06-19 78 views
8

Tôi đang làm việc trên một dự án yêu cầu chuyển đổi email html thành văn bản. Dưới đây là một phiên bản đơn giản của các mã HTML:Chuyển đổi bảng HTML thành văn bản

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

Kết quả dự kiến ​​sẽ giống như thế này trong một file văn bản (với các cột liên kết độc đáo):

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

Ý tưởng của tôi là phân tích các nội dung HTML của DOMDocument. Sau đó, tôi sẽ đặt chiều rộng mặc định cho bảng (ví dụ: 100 khoảng trắng) rồi chuyển đổi chiều rộng của mỗi cột từ% thành số không gian (dựa trên colspan & width thuộc tính của thẻ <td>). Sau đó, tôi sẽ trừ các chiều rộng cột này thành strlen của dữ liệu trong mỗi cột để lưu trữ số lượng khoảng trắng mà tôi cần phải pad_right vào chuỗi để làm cho mọi thứ đều thẳng đứng.

Tôi đã làm việc theo cách đó, chưa được lưu trữ những gì tôi muốn nhưng chỉ tự hỏi nếu nó là ngu ngốc hoặc bất cứ ai biết một cách tốt hơn xin vui lòng giúp tôi ra ngoài.

Ngoài ra khi nói đến các ngôn ngữ đa ngôn ngữ (tiếng Nhật, tiếng Hàn, v.v ...), tôi không nghĩ rằng cách tiếp cận của tôi sẽ hoạt động vì nhân vật của họ sẽ lớn hơn một không gian và kết thúc một mớ hỗn độn.

Ai đó có thể giúp tôi không?

+4

Điều này chỉ có thể hoạt động nếu văn bản được hiển thị bằng phông chữ đơn cách. – Roman

+3

Huh? Multibyte không (/ không nên) chiếm nhiều khoảng trống hơn trong tệp txtfile của bạn. – PeeHaa

+1

Bạn sẽ làm gì nếu có một cột rộng hơn những gì bạn đang mong đợi? –

Trả lời

11

Đây chỉ là một ý tưởng.

Không phát minh lại bánh xe. Việc hiển thị bảng rất khó, việc hiển thị các bảng chỉ sử dụng văn bản thậm chí còn khó khăn hơn.

Có các trình duyệt văn bản có thể được sử dụng bởi dòng lệnh, như lynx. Bạn có thể ghi đè bảng html của mình vào một tệp, chuyển tệp đó vào trình duyệt văn bản và lấy đầu ra của mình.

Lưu ý: trình duyệt văn bản thường được sử dụng trong trình bao, thường hiển thị trong không gian đơn. Đây vẫn là điều kiện tiên quyết.

lynx và w3m đều khả dụng trên Windows. Để làm rõ sự phức tạp của trình kết xuất bảng dựa trên văn bản, hãy xem w3m, là mã nguồn mở. These 3000 lines of code chỉ có để hiển thị các bảng html.

CẬP NHẬT

mã ví dụ:

$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 cần phải được trong thư mục làm việc của bạn.

(không dùng thử)

+0

Cảm ơn, vấn đề là chuyển đổi này phải là tự động và là một phần của phần mềm công ty của chúng tôi được chạy trên máy chủ Cửa sổ, vì vậy tôi không thể cài đặt Lynx – Olizt

+1

Ồ, tôi nghĩ nó là tự động. Ý tưởng là để tự động hóa nó. PHP viết tệp và thực hiện (shell_exec) trình duyệt. Tôi sẽ thêm một mã exmaple – Roman

+0

@Olizt xem ở trên: "lynx và w3m đều có sẵn trên Windows"! – feeela

Các vấn đề liên quan