سؤال

هل من الممكن إنشاء كتلة من التعليمات البرمجية داخل CKEditor لن يلمسها المحرر نفسه، وسيتم الحفاظ عليها في حالتها المقصودة حتى يتم تغييرها بشكل صريح من قبل المستخدم؟لقد كنت أحاول إدخال متغيرات جافا سكريبت (مرتبطة بعلامات البرنامج النصي) وفيلم فلاش يتبعه، لكن CKEditor يستمر في إعادة كتابة الكود/الترميز الملصق، وبذلك يكسر الكود الخاص بي.

أنا أعمل مع الإعداد التالي:

<script type="text/javascript">
  var editor = CKEDITOR.replace("content", {
    height : "500px",
    width : "680px",
    resize_maxWidth : "680px",
    resize_minWidth : "680px",
    toolbar :
    [
      ['Source','-','Save','Preview'],
      ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],
      ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
      ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
      ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
      ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
      ['Link','Unlink','Anchor'],
      ['Image','Table','HorizontalRule','SpecialChar']
    ]
  });
  CKFinder.SetupCKEditor( editor, "<?php print url::base(); ?>assets/ckfinder" );
</script>

أفترض أن الحل الأمثل هو الحفاظ على محتويات أي علامة تحتوي على class="preserve" تمكين أكثر بكثير من الحصريات المحدودة.

تحديث:أعتقد أن الحل لهذه المشكلة موجود CKEDITOR.config.protectedSource(), ، لكن تجربتي في التعبير العادي أثبتت أنها صغيرة جدًا بحيث لا يمكنها التعامل مع هذه المشكلة.كيف يمكنني استثناء جميع العلامات التي تحتوي على الفئة "المحفوظة" من لمسها بواسطة CKEditor؟

هل كانت مفيدة؟

المحلول 3

والقضية ليست مع CKEditor. بدلا من ذلك، كانت هذه المسألة مع MVC-محرك تشغيل الموقع نفسه. Kohana ديه global_xss_filtering في تكوينه أن يتم تمكين افتراضيا. وهذا ما يمنع تقديم علامات البرنامج النصي، لمنع البرمجة الهجمات على موقعك. سوف تغير هذه القيمة إلى false تسمح بتقديم علامات <script> في أشكال، ولكن كما يفتح الموقع للقضايا الأمنية المحتملة التي يمكن أن تكون خطيرة جدا. فإنه من المستحسن أن لا تعطيل global_xss_filtering.

/* /(system|application)/config/config.php - line 66 */
/**
 * Enable or disable global XSS filtering of GET, POST, and SERVER data. This
 * option also accepts a string to specify a specific XSS filtering tool.
 */
$config['global_xss_filtering'] = FALSE;

نصائح أخرى

في CKEDITOR مجلد لديك على config.js ملف. فتحه ولصق رمز:

CKEDITOR.editorConfig = function( config ) {
    config.allowedContent = {
        script: true,
        $1: {
            // This will set the default set of elements
            elements: CKEDITOR.dtd,
            attributes: true,
            styles: true,
            classes: true
        }
    };
};

ووسوف تسمح علامات <script>...</script> في وضع مصدر.

الاقتراح 1: قم بإنشاء منطقة نصية منفصلة للمسؤول لإدخال البرامج النصية / كود HTML.

الاقتراح 2: إدخال رمز BB، مثل [script][/script] أو [html][/html] التي يمكن للمسؤولين استخدامها لوضع البرامج النصية / كود HTML وترجمتها من جانب الخادم الخاص بك <script></script> ورمز HTML.تأكد عند عرض محتوى محفوظ في CKEditor، فإنك تحتاج إلى أن يقوم الخادم الخاص بك بترجمته إلى كود bbcode أولاً (وإلا سيقوم CKEditor بإزالته).أو الطريقة الأقل إزعاجًا هي تخزين المحتوى المقدم في قاعدة البيانات كما تم إدخاله والقيام بالترجمة فقط عند عرض الصفحة.

اقتراح 3:منذ كنت ترغب في استخدام class="preserve" لوضع علامة على العلامات التي لا تريد أن يقوم CKEditor بإزالتها، ثم قم بإضافة أسطر JavaScript التالية عند تهيئة المحرر:

// protect <anytag class="preserve"></anytag>
CKEDITOR.config.protectedSource.push( /<([\S]+)[^>]*class="preserve"[^>]*>.*<\/\1>/g );
// protect <anytag class="preserve" /><
CKEDITOR.config.protectedSource.push( /<[^>]+class="preserve"[^>\/]*\/>/g );
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top