2008-12-18 28 views
9

Tôi có một trang web nơi người dùng có thể đăng nội dung (như trong diễn đàn, nhận xét, v.v.) bằng cách thực hiện tùy chỉnh TinyMCE. Rất nhiều người trong số họ muốn sao chép & dán từ Word, điều đó có nghĩa là đầu vào của họ thường đi kèm với rất nhiều định dạng nội tuyến liên quan đến MS.PHP để dọn dẹp dán đầu vào Microsoft

Tôi không thể loại bỏ <span whatever> vì TinyMCE dựa vào thẻ span cho một số định dạng của nó và tôi không thể (và không muốn) buộc người dùng sử dụng "Dán từ từ" của TinyMCE tính năng (mà dường như không hoạt động tốt anyway).

Bất kỳ ai biết thư viện/lớp/chức năng sẽ chăm sóc điều này cho tôi? Nó phải là một vấn đề phổ biến, mặc dù tôi không thể tìm thấy bất cứ điều gì dứt khoát. Tôi đã suy nghĩ gần đây rằng một loạt các regexes brute-lực tìm kiếm các mẫu MS cụ thể có thể làm các trick, nhưng tôi không muốn viết lại một cái gì đó mà có thể đã có sẵn, trừ khi tôi phải.

Ngoài ra, việc sửa các dấu ngoặc kép, dấu gạch ngang, v.v. sẽ tốt. Tôi có công cụ của riêng mình để làm điều này ngay bây giờ, nhưng tôi thực sự chỉ muốn tìm một bộ lọc chuyển đổi MS để cai trị tất cả.

Trả lời

7

HTML Purifier sẽ tạo đánh dấu tuân thủ tiêu chuẩn và lọc ra nhiều cuộc tấn công có thể xảy ra (chẳng hạn như XSS).

Để dọn dẹp nhanh hơn không yêu cầu lọc XSS, tôi sử dụng phần mở rộng PECL Tidy là một ràng buộc cho tiện ích Tidy HTML.

Nếu những thứ đó không giúp bạn, tôi khuyên bạn nên chuyển sang FCKEditor có tính năng này built-in.

+0

Cảm ơn, nhưng không ai trong số đó có vẻ đối phó với định dạng MS, đó là những gì tôi chủ yếu quan tâm. Bộ lọc HTML có kế hoạch cho phiên bản 3.5 nhưng với "nghiên cứu cần thiết". – da5id

+0

Sau đó, tôi đề nghị bạn chuyển sang fckeditor mà có thể đối phó với đầu vào từ. Đã cập nhật câu trả lời của tôi. –

+0

Hmm. Trước đây tôi đã thích TinyMCE hơn FCKeditor vì một số lý do khác, nhưng điều này có thể ảnh hưởng đến tôi. Cảm ơn cho các tip & vui mừng được chấp nhận của tôi +1 :) – da5id

0

Trang web http://word2cleanhtml.com/ thực hiện tốt công việc chuyển đổi từ Word. Tôi đang sử dụng nó trong PHP bằng cách loại bỏ, để xử lý một số di sản HTML, và cho đến bây giờ nó làm việc khá tốt (kết quả là rất sạch sẽ <p>, <b> mã). Tất nhiên, là một dịch vụ bên ngoài nó không tốt để sử dụng nó trong xử lý trực tuyến như trường hợp của bạn.

Nếu bạn dùng thử và mang lại 400 lỗi, trước hết hãy thử lọc HTML với số Tidy.

0

Trong trường hợp của tôi, có một mẫu. Phần không mong muốn luôn luôn bắt đầu với

<!-- [if gte mso 9]> 

và kết thúc bởi một

<![endif]--> 

Vì vậy, giải pháp của tôi là để cắt bỏ tất cả mọi thứ trước và sau khi khối này:

$array = explode("<!-", $string, 2); 
$begin = $array[0]; 
$end=substr(strrchr($string,'[endif]-->'),10); 
echo $begin.$end; 
0

Trong trường hợp của tôi, điều này chỉ hoạt động tốt:

$text = strip_tags($text, '<p><a><em><span>'); 

Thay vì cố gắng loại bỏ những thứ bạn không muốn như xml từ nhúng, bạn có thể chỉ định bạn được phép sử dụng thẻ.

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