2008-10-13 37 views
5

Tôi có một bộ tài liệu Word mà tôi muốn xuất bản bằng cách sử dụng công cụ PHP mà tôi đã viết. Tôi sao chép và dán các tài liệu Word vào một hộp văn bản và sau đó lưu chúng vào MySQL bằng cách sử dụng chương trình PHP. Vấn đề tôi phát sinh từ tất cả các ký tự không chuẩn mà tài liệu Word có, như dấu ngoặc kép và dấu ba chấm ("..."). Những gì tôi làm tại thời điểm này là tìm kiếm và thay thế những thứ này bằng tay (và cả các ký hiệu nước ngoài như e-level) với văn bản thuần hoặc HTML (& eacute; vv) Có chức năng nào trong PHP tôi có thể gọi nó không lấy đầu ra của một tài liệu Word và chuyển đổi tất cả mọi thứ mà phải là thực thể thành các thực thể, và các biểu tượng khác không hiển thị đúng trong Firefox thành các biểu tượng hiển thị.Chuyển đổi tài liệu Word thành HTML có thể sử dụng được trong PHP

Cảm ơn!

Trả lời

3

Giải pháp tốt hơn là đảm bảo rằng cơ sở dữ liệu của bạn được thiết lập để hỗ trợ các ký tự UTF-8. Các ký tự bổ sung có sẵn trong bộ mở rộng sẽ bao gồm tất cả các ký tự "không chuẩn" mà bạn đang nói đến.

Nếu không, nếu bạn thực sự phải chuyển đổi các ký tự này thành các thực thể HTML, hãy sử dụng htmlentities().

+0

Theo kinh nghiệm của tôi, ngay cả với tất cả các bảng mã ký tự thiết lập đúng, một số nhân vật chỉ được nuốt vào thời điểm họ nhận được đến trình duyệt. Tôi không biết nếu đây là một lỗi trong PHP (ngôn ngữ máy chủ tôi sử dụng nhiều nhất) hoặc những gì, nhưng tôi đã tìm thấy chuyển đổi cho các thực thể đáng tin cậy hơn. – eyelidlessness

+0

Xin chào Richard, bạn có lời khuyên nào về cách thiết lập MySQL để hỗ trợ UTF-8 không? Cảm ơn! – Ben

+0

TẠO DATABASE db_name CHARACTER SET 'utf8' - xem http://dev.mysql.com/doc/refman/5.0/en/charset-database.html và http://dev.mysql.com/doc/refman/5.0 /en/charset-table.html. Lưu ý rằng bạn sẽ phải làm điều gì đó như SET NAMES 'utf8'; khi bạn kết nối với DB để đảm bảo bạn tìm nạp dữ liệu bằng UTF-8. –

0

htmlspecialchars() sẽ giúp bạn có được một chặng đường dài, nhưng hãy cẩn thận vì tài liệu Word lộn xộn.

5

này đã phục vụ tốt cho tôi trong quá khứ:

$str = mb_convert_encoding($str, 'HTML-ENTITIES', 'UTF-8') 
1

Tôi nghĩ rằng tất cả những câu trả lời bỏ lỡ một thời điểm quan trọng. Bản thân Windows sử dụng một cửa sổ của latin1, vì vậy nếu bạn dán một số ký tự đặc biệt vào (như dấu ngoặc kép) vào một biểu mẫu trên máy tính Windows và được gửi đến hộp unix (hoặc bất kỳ thứ gì không phải là muckrosoft) hoặc bất cứ điều gì) một số các nhân vật không được kết hợp với bất cứ điều gì hệ thống unix hiểu, do đó các nhân vật bối rối và bị cắt xén. Điều này có nghĩa là ngay cả khi bạn có một cơ sở dữ liệu UTF-8, và sử dụng htmlentities, một số nasties vẫn sẽ đi qua bởi vì chúng là các ký tự mà hệ điều hành không nhận ra - chúng không phải là một phần của UTF-8 - là những phát minh chỉ dành cho microsoft. Tôi rất thích biết một giải pháp khéo léo - những gì tôi làm là danh sách đen các mã ký tự của các ký tự chỉ dành cho microsoft mà tôi đã gặp phải với danh sách các ký tự UTF-8 (cũng là thủ công), làm một str_replace cho tất cả những điều này, và THÌ bạn có thể làm bất cứ điều gì bạn muốn với họ - iconv, htmlentities, lưu thẳng vào một cơ sở dữ liệu utf8, nó không còn quan trọng nữa.

Nắm bắt tất cả điều này là một chút run rẩy - hãy xem http://www.cs.tut.fi/~jkorpela/www/windows-chars.html để có giải thích tuyệt vời mà tôi đã biến thành dạng ngắn ở trên. - Nếu ai đó có giải pháp tốt hơn (chắc chắn có một giải pháp nào đó!) Về cách làm thế nào để PHPify bài viết này giải thích ... Tôi rất muốn nghe nó!

0

Đây là giải pháp mà tôi đã chuẩn bị cho vấn đề với bộ ký tự không cửa sổ di động. Điều này thay thế các ký tự gần như Latin-1 với các thực thể HTML tương đương của chúng.

$translation=array(
    // reference from http://www.cs.tut.fi/~jkorpela/www/windows-chars.html 
    "\x82" => "‚", 
    "\x83" => "ƒ", 
    "\x84" => "„", 
    "\x85" => "…", 
    "\x86" => "†", 
    "\x87" => "‡", 
    "\x88" => "ˆ", 
    "\x89" => "‰", 
    "\x8a" => "Š", 
    "\x8b" => "‹", 
    "\x8c" => "Œ", 
    "\x91" => "‘", 
    "\x92" => "’", 
    "\x93" => "“", 
    "\x94" => "”", 
    "\x95" => "•", 
    "\x96" => "–", 
    "\x97" => "—", 
    "\x98" => "˜", 
    "\x99" => "™", 
    "\x9a" => "š", 
    "\x9b" => "›", 
    "\x9c" => "œ", 
    "\x9f" => "Ÿ", 
);  
return str_replace(array_keys($translation),array_values($translation),$input); 

Nó làm việc cho tôi TM

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