2012-03-16 68 views
33

Làm thế nào tôi có thể vô hiệu hóa CKEditor để giúp tôi mỗi lần  , khi tôi không muốn chúng? Tôi đang sử dụng CKEditor với bộ điều hợp jQuery.CKEditor không mong muốn   ký tự

Tôi không muốn có bất kỳ thẻ   nào.

+1

Làm cách nào để biết bạn muốn cái nào và bạn muốn cái nào? Bạn có muốn xóa chúng * tất cả *, hoặc giảm bội số hay thứ gì đó khác không? Làm thế nào họ nhận được ở đó ở nơi đầu tiên? –

+0

Tôi không muốn họ được thêm vào .. tất cả trong số họ – user969724

+0

OK, chỉ muốn làm rõ. Vì vậy, khi người dùng nhấn thanh dấu cách, nó sẽ không bao giờ thêm nhiều hơn một khoảng trống? Nói cách khác, bạn không muốn phải làm điều này ở phía máy chủ, đúng không? Tôi cho rằng cách tốt nhất là biến tất cả chúng thành không gian thông thường (chỉ trong trường hợp một số tách biệt hai từ), nhưng tôi không chắc chắn làm thế nào để làm điều đó với ckeditor cụ thể. –

Trả lời

49

Sau một số nghiên cứu, tôi có thể giải thích một chút về vấn đề này - không may là không có giải pháp ngoài hộp.

Trong ckeditor có bốn cách một không gian không-break có thể xảy ra (ai biết nhiều hơn?):

  1. Automatic filling of empty blocks. Điều này có thể bị tắt trong cấu hình:

    config.fillEmptyBlocks = false; 
    
  2. Automatic insertion when pressing TAB-key. Điều này có thể bị tắt trong cấu hình:

    config.tabSpaces = 0; 
    
  3. Chuyển đổi không gian đôi thành SPACE + NBSP. This is a browser behavior and will thus not be fixed by the CKEditor team. Nó có thể được cố định serverside hoặc bởi một onunload javascript clientside. Có lẽ php này là một sự khởi đầu:

    preg_replace('/\s \s/ig', ' ', $text); 
    
  4. Dán bản sao & dán. Nếu bạn dán UTF-8 no-break space hoặc CKEditor hai dấu cách sẽ tự động chuyển đổi. Giải pháp duy nhất tôi thấy ở đây là thực hiện một regex như trên. config.forcePasteAsPlainText = true; không giúp ích gì.

Tóm tắt: Để loại bỏ tất cả không gian trống bạn cần viết hàm bổ sung để xóa đầu vào của người dùng.

Nhận xét và đề xuất thêm được đánh giá cao! (Tôi đang sử dụng ckeditor 3.6.4)

+2

config.fillEmptyBlocks = false; chăm sóc   tự động chèn vào ô trống của bảng. Cảm ơn bạn! – aaandre

+6

'config.fillEmptyBlocks = false;' không dừng sự cố cho tôi – dsdsdsdsd

+0

Eureka! Nó đã làm việc!!! config.fillEmptyBlocks = false; xD –

-3

Nếu bạn đang sử dụng PHP bạn có thể sử dụng như sau:

preg_replace("/[\<]p[\>][\s]+&nbsp;[\<][\/]p[\>]/" , " " , $pre_comment); 

này sẽ loại bỏ: "<p> &nbsp;</p>"

Enjoy :)

Maxwell

+9

Tôi không muốn downvote câu trả lời này bởi vì bạn mới ở đây nhưng xin vui lòng ghi nhớ ... '1.' câu hỏi đã được trả lời một cách chính xác! (khi bạn không có câu trả lời tốt hơn thì không trả lời gì cả, đặc biệt là câu hỏi cũ) '2.' mẫu này chứa các dấu ngoặc' [] 'không cần thiết (tất cả chúng), chuỗi thoát không cần thiết' \> ', và hầu hết có lẽ '\ <' và không cần thiết '+' sau '\ s' (mẫu' ~

\ s  

~ 'trông có vẻ ngắn hơn?). '3.' nếu bạn muốn chắc chắn có một khoảng trống thông thường bên trong thẻ' P', thay thế '~

\ s *   \ s *

~ i' phân biệt chữ hoa chữ thường với SPACE là gợi ý tốt hơn (và ngắn hơn). – Wh1T3h4Ck5

-3

Thêm số này vào số config.js

của bạn 210
config.enterMode = CKEDITOR.ENTER_BR, 
9

Có một cách khác để có thể xảy ra một ký tự khoảng trắng. Chỉ cần nhập một khoảng trống ở cuối câu.

CKEditor thoát các thực thể HTML cơ bản cùng với các thực thể latin và greek.

Thêm các tùy chọn cấu hình để ngăn chặn điều này (bạn cũng có thể thêm chúng vào tập tin cấu hình của bạn):

CKEDITOR.on('instanceCreated', function(event) { 
editor.on('configLoaded', function() { 

    editor.config.basicEntities = false; 
    editor.config.entities_greek = false; 
    editor.config.entities_latin = false; 
    editor.config.entities_additional = ''; 

}); 
}); 

Các tùy chọn này sẽ ngăn chặn ckeditor thoát nbsp gt lt amp ' " một ký tự Latin và Hy Lạp khác.

Nguồn: http://docs.ckeditor.com/#!/api/CKEDITOR.config http://docs.ckeditor.com/source/plugin48.html#CKEDITOR-config-cfg-basicEntities

+4

config.basicEntities = false sẽ ngăn không cho HTML được nhập bị loại bỏ và do đó mọi người sẽ chỉ có thể nhập vào HTML mà nếu không sẽ được lọc/trả lại vô hại. (Đó là ngầm định khi bạn nói nó dừng gt và lt được thoát, và thực sự bạn không nên tin tưởng bất kỳ dữ liệu người dùng nhập vào, ngay cả khi nó đến qua ckEditor, nhưng nghĩ rằng nó đáng nhắc đến.) –

0

tôi đã có vấn đề tương tự tạo ra một số bảng. Những gì tôi thấy là nếu tôi tạo ra các bảng với quy tắc css align="left" thì <p>&nbsp;</p> được thêm vào, nhưng nếu tôi thay đổi quy tắc css thành align="center" tôi có thể chỉnh sửa các đoạn văn và chúng không được thêm lần nữa.

7

Hãy thử:

config.basicEntities = false;

để tôi khắc phục sự cố.

+0

@gabriel đã bao gồm điều này trong trả lời 17 tháng trước khi bạn thêm điều này. Một bình luận (và upvote) về câu trả lời của ông sẽ tốt hơn vì lặp lại nó là dư thừa và lãng phí thời gian của người đọc, chưa kể rằng nó làm cho nó trông giống như bạn không kiểm tra các câu trả lời khác. –

+1

Xem thêm nhận xét của tôi về basicEntities = false cho phép thông qua HTML tùy ý trên câu trả lời của @ gabriel. –

+1

tôi tin rằng câu trả lời của anh ấy là thẳng vào vấn đề, và dòng này một mình giải quyết được vấn đề mà không cần phải xao nhãng – Emad

2

Tôi nhận thấy một số thao tác chỉnh sửa văn bản, như xóa ký tự (bằng cách nhấn nút Backspace) đang tách nút văn bản đã chỉnh sửa thành hai. Nhấn vào thanh Space ở phần cuối của nút văn bản mới được tạo ra luôn luôn dẫn đến &nbsp; thay vì không gian bình thường. Tôi gọi normalize()http://www.w3schools.com/jsref/met_node_normalize.asp đến yếu tố thay đổi sau khi thay đổi:

CKEDITOR.on('instanceReady', function (ck) { 
    ck.editor.on("change", function (e) { 
     var sel = ck.editor.getSelection(); 
     if (sel) { 
      var selected = sel.getStartElement(); 
      if (selected && selected.$) 
       sel.getStartElement().$.normalize(); 
     } 
    }); 
}); 
3

trong config.js:

CKEDITOR.editorConfig = function(config) { 
    config.enterMode = CKEDITOR.ENTER_BR; // <p></p> to <br /> 
    config.entities = false; 
    config.basicEntities = false; 
}; 

Nó làm việc cho tôi, sau khi bạn có thể in văn bản với php: html_entity_decode($someText);

0

Tôi đã phải chơi xung quanh với config.js, do đó, để khắc phục '?' hiển thị trong safari Tôi đã kết thúc bằng 3 dòng trong config.js

config.fillEmptyBlocks = function (element) { 
return true; // DON'T DO ANYTHING!!!!!}; 
config.entities = false; 
config.basicEntities = false; 
Các vấn đề liên quan