CDATA में वर्डप्रेस इनलाइन स्क्रिप्ट को कब लपेटता है?


11

मैं अपनी एक तीसरी पार्टी की स्क्रिप्ट के साथ एक समस्या को डिबग कर रहा हूं जो कि वर्डप्रेस उपयोगकर्ताओं द्वारा स्क्रिप्ट और HTML के एक स्निपेट को अपने पोस्ट के शरीर में कॉपी / पेस्ट करके उपयोग करते हैं जैसे (निश्चित रूप से गैर-वास्तविक दुनिया उदाहरण):

<script>
window.foobar = window.foobar || { hello: function(){ console.log('Hello World'); } };
window.foobar.hello();
</script>

मैंने देखा कि वर्डप्रेस की कुछ संस्थापनाएँ इसे सीडीएटीए में लपेटेंगी, कुछ (शायद कुछ प्रकार की DOCTYPE जाँच करके - हालांकि सभी विषय मैंने इस पर परीक्षण किए थे एक HTML5 सिद्धांत का उपयोग करके)।

फिर भी, सीडीएटीए में स्क्रिप्ट को लपेटते समय, उपयोगकर्ताओं को निम्नलिखित बग से काट लिया जाएगा: https://core.trac.wordpress.org/ticket/3670 (समापन >को गलत तरीके से बदल दिया गया है &gt;) जो स्क्रिप्ट सामग्री की अनदेखी करने वाले ब्राउज़र की ओर जाता है :

<script>// <![CDATA[  window.foobar = window.foobar || { hello: function(){ console.log('Hello World'); } }; window.foobar.hello();  // ]]&gt;</script>

मैं खुद बहुत ज्यादा WP-Fu का मालिक नहीं हूं और केवल googling ने मुझे समस्या की पहचान करने के लिए प्रेरित किया, इसलिए मेरा सवाल यह होगा: जब वर्डप्रेस CDATA खंडों में इनलाइन स्क्रिप्ट को लपेटता है? क्या उपयोगकर्ता किसी तरह इस व्यवहार को रोक सकते हैं? क्या उपयोगकर्ता किसी तरह WP कोर को संशोधित किए बिना उपरोक्त बग के आसपास काम कर सकता है?


1
जब जेएस इनलाइन को संपादक में चिपकाते हैं, तो WP को यह व्यवहार करना चाहिए। मैं wp_head या wp_enqueue_script का उपयोग करके JS को
एन्हांस करने

क्या आपका मतलब "पोस्ट की बॉडीज" जैसा WYSIWYG एडिटर में है? जब मैं स्क्रिप्ट देख सकता हूं, तो जेएस सीडीएटीए टैग में लिपट जाता है, जब स्क्रिप्ट छपी होती है (जो कई तरीकों से लागू की जा सकती है) लेकिन फिल्टर करने योग्य होती है। मैं, कल्पना कर सकते हैं अगर आप करते हैं मतलब एक पोस्ट की WYSIWYG, यह विषय के द्वारा किया सामग्री पर कुछ छानने हो सकता है।
डौग बेलचैबर

1
यह अनुशंसा नहीं की जाती है कि आप WYSIWYG संपादक में जावास्क्रिप्ट पोस्ट करें। संपादक के पास आपकी सामग्री को साफ करने के लिए कई फिल्टर हैं जो इनलाइन js के साथ खराब तरीके से बातचीत करते हैं। ऐसे प्लगइन्स हैं जो इस प्रकार के परिदृश्य में मदद करते हैं।
२१:१ret पर माइकनागरेट

जवाबों:


1

दरअसल, यह वर्डप्रेस नहीं है जो CDATAटैग्स को सम्मिलित कर रहा है , लेकिन विज़ुअल एडिटर, टाइनीएमसीई। TinyMCE का विवरण यहाँ ऑफटॉपिक है, लेकिन आप स्टैकओवरफ़्लो पर इसका समाधान पढ़ सकते हैं ।

उस ने कहा, टिनीएमसीई को रोकना आपके लिए संपूर्ण समाधान नहीं हो सकता है। वर्डप्रेस में ही CDATAटैग जोड़ने के लिए एक फ़ंक्शन भी है wxr_cdata, जिसका उपयोग वैध xml-file को आउटपुट करते समय किया जाता है, उदाहरण के लिए यदि आप rss-feed में सामग्री के उपयोग की फ़ाइल को निर्यात करना चाहते हैं। यदि वे दस्तावेज़ को मान्य xHTML होना चाहते हैं, तो थीम और / या प्लगइन्स इस फ़िल्टर को सामग्री में संलग्न करने का निर्णय ले सकते हैं।

यह वह जगह है जहां आप तब बग में भागते हैं , जिसे पहली बार बारह साल पहले प्रलेखित किया गया था और अनसुलझा रहता है। यह इन तीन पंक्तियों के बारे में है the_content:

$content = apply_filters( 'the_content', $content );
$content = str_replace( ']]>', ']]&gt;', $content );
echo $content;

जैसा कि आप देख सकते हैं, str_replaceहार्डकोड है, इसके तुरंत बाद प्रतिध्वनि। इस प्रतिस्थापन को बाधित करने का कोई तरीका नहीं है।

हालाँकि, आप क्या कर सकते हैं, यदि आप अपने विषय को नियंत्रित करते हैं, तो बफर the_content को बदलकर उसे बदल सकते हैं। ऐशे ही:

ob_start();
the_content();
$content = ob_get_clean();
$content = str_replace( ']]&gt', ']]>', $content ); 
echo $content;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.