it-swarm-vi.tech

Làm cách nào tôi có thể lọc gunk Microsoft Word từ nội dung đã dán?

Tôi có một số người dùng đang đăng lên blog của nhóm và có thể cắt và dán nhưng bột nhão của họ bao gồm những thứ như:

<!– /* Font Definitions */ @font-face {font-family:”Cambria Math”; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-520092929 1073786111 9 0 415 0;} @font-face {font-family:”Trebuchet MS”; panose-1:2 11 6 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:”"; margin-top:0in; margin-right:0in; margin-bottom:10.0pt; margin-left:0in; line-height:115%; mso-pagination:Widow-Orphan; font-size:12.0pt; font-family:”Trebuchet MS”,”sans-serif”; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-bidi-font-family:”Times New Roman”; mso-bidi-theme-font:minor-bidi; color:black;} p {mso-style-noshow:yes; mso-style-priority:99; mso-margin-top-alt:auto; margin-right:0in; mso-margin-bottom-alt:auto; margin-left:0in; mso-pagination:Widow-Orphan; font-size:12.0pt; font-family:”Times New Roman”,”serif”; mso-fareast-font-family:”Times New Roman”;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:12.0pt; mso-ansi-font-size:12.0pt; mso-bidi-font-size:12.0pt; mso-ascii-font-family:”Trebuchet MS”; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:”Trebuchet MS”; mso-bidi-font-family:”Times New Roman”; mso-bidi-theme-font:minor-bidi; color:black;} .MsoPapDefault {mso-style-type:export-only; margin-bottom:10.0pt; line-height:115%;} @page WordSection1 {size:8.5in 11.0in; margin:1.0in 1.0in 1.0in 1.0in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} –>

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:”Table Normal”;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:”";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top:0in;
mso-para-margin-right:0in;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0in;
line-height:115%;
mso-pagination:Widow-Orphan;
font-size:11.0pt;
font-family:”Calibri”,”sans-serif”;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:”Times New Roman”;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:”Times New Roman”;
mso-bidi-theme-font:minor-bidi;}

Tôi có thể làm gì để tự động lọc mã như thế này?

3
artlung

Có một nút trên trình soạn thảo văn bản trực quan được tích hợp trong WordPress sẽ loại bỏ định dạng Microsoft Word. Nó được dán nhãn "Dán từ Word" alt text

8
Chris_O

Tôi khuyên bạn nên sử dụng plugin TinyMCE Advanced . Nó cho phép bạn thêm tùy chọn 'Dán từ Word' để lo tất cả những điều đó cho bạn.

Tuy nhiên, nếu bạn không quan tâm đến điều đó, bạn có thêm một vài lựa chọn. Như thế này:

function get_rid_of_mso_junk( $content ){
  return preg_replace( '@(mso|panose)[^:]{1,25}:[^;]+;(\s+)?(\n+)[email protected]', '', $content );
}

add_filter( 'content_save_pre', 'get_rid_of_mso_junk' );

Chỉ cần tiếp tục thêm các khai báo không mong muốn vào tập hợp chụp đầu tiên trong biểu thức chính quy đó để thêm các dòng cần xóa. Ví dụ: (mso|panose|other-junk|annoyance).

5
John P Bloch

Đối với bất cứ ai đang tìm kiếm một giải pháp cho vấn đề này, tôi đã làm một cái gì đó như thế này:

function delete_between($beginning, $end, $string) {
    $beginningPos = strpos($string, $beginning);
    $endPos = strpos($string, $end);
    if (!$beginningPos || !$endPos) {
    return $string;
    }

    $textToDelete = substr($string, $beginningPos, ($endPos + strlen($end)) - $beginningPos);

    return str_replace($textToDelete, '', $string);
}

function clean_content( $content ){
    if( is_home() || is_single()){
        $content = delete_between('<!--[if gte mso', ';}', $content);   
        return $content;
    }else{
    return $content;
}

add_filter( 'the_content', 'clean_content' );
add_filter( 'the_excerpt', 'clean_content' );

Bạn có thể thay thế các chuỗi trong hàm xóa_b between bằng bất cứ điều gì bạn muốn. Điều đó dường như làm việc cho tôi mặc dù.

2
codeprokanner

Tôi đã làm việc với những khách hàng phải đối mặt với vấn đề này rất nhiều. Thủ thuật, tôi đã tìm thấy, là sao chép-dán vào chế độ xem HTML và sau đó quay lại trình chỉnh sửa Visual sang định dạng Tweak nếu cần.

Điều này cũng cần thiết nếu sao chép từ một trang web khác. Đôi khi, bạn sẽ vô tình lấy các định nghĩa lớp và kiểu dáng nội tuyến từ nguồn bên ngoài và điều đó có thể phá vỡ màn hình nếu bạn không có các lớp hoặc kiểu tương tự được thiết lập hoặc hỗ trợ bởi trang web của bạn.

Một tùy chọn khác là hiển thị cho người dùng của bạn Windows Live Writer . Đây là một sản phẩm của Microsoft hoàn toàn miễn phí, chơi độc đáo với sao chép từ Word và có thể tương tác với WordPress - bạn viết bài đăng, chỉnh sửa bài đăng của mình, sử dụng trình kiểm tra chính tả tích hợp, định dạng bài đăng để hiển thị chính xác cách bạn muốn, sau đó nhấp vào "Xuất bản" để đẩy bài đăng của bạn lên WordPress thông qua XMLRPC. Đây là một hệ thống khá âm thanh giúp nó cực kỳ dễ dàng dạy cho một blogger lần đầu tiên cách viết blog ... đặc biệt là vì giao diện người dùng rất giống với Word để bắt đầu.

2
EAMann