2011-11-27 5 views
10

मैं (//<![CDATA[ , //]]>) ब्लॉक कैसे हटा सकता हूं; script तत्व के अंदर टैग।`// <! [सीडीएटीए [` और अंत '//]]> `को कैसे हटाएं?

<script type="text/javascript"> 
    //<![CDATA[ 
    var l=new Array(); 
    .......................... 
    .......................... 
    //]]> 
</script> 

ऐसा लगता है कि preg_replace() साथ किया जा सकता लेकिन havent एक समाधान है कि मेरे लिए काम करता पाया।

मैं किस रेगेक्स का उपयोग करूंगा?

+5

बस उत्सुक क्यों आप उन दो पंक्तियों निकालना चाहते हैं? –

+0

बोम्बेन: @ जोनाथनएम सही है, आपको इन तत्वों को हटाने की आवश्यकता नहीं हो सकती है। देखें [स्क्रिप्ट टैग के भीतर एक सीडीएटीए अनुभाग कब आवश्यक है?] (Http://stackoverflow.com/questions/66837/when-is-a-cdata-section-necessary-within-a-script-tag) और [Is सीडीएटीए वास्तव में जरूरी है?] (Http://stackoverflow.com/questions/4215261/is-cdata-really-necessary)। इस पर विचार। – Tadeck

+0

ठीक है - यह सिर्फ जावास्क्रिप्ट आग नहीं है .. इसलिए कोड निष्पादित नहीं किया गया है .. यह तब होता है जब मैं एलन के समाधान का उपयोग करता हूं। लेकिन जानकारी पर धन्यवाद। – bomanden

उत्तर

11

निम्नलिखित regex यह करना होगा ...

$removed = preg_replace('/^\s*\/\/<!\[CDATA\[([\s\S]*)\/\/\]\]>\s*\z/', 
         '$1', 
         $scriptText); 

CodePad

+0

धन्यवाद एलेक्स .. लेकिन यह एलन मूर का समाधान था जो – bomanden

+0

@bomanden काम करता था क्या मेरा समाधान काम नहीं करता था? – alex

+0

हाय एलेक्स .. दुर्भाग्य से नहीं। पता है क्यों - लेकिन एक एलन काम कर रहा है। शायद आप दो समाधानों के बीच अंतर देख सकते हैं। आपके इनपुट के लिए धन्यवाद। – bomanden

6

यदि आप चाहिए ...

$s = preg_replace('~//<!\[CDATA\[\s*|\s*//\]\]>~', '', $s); 

यह संलग्न कोड की खरोज अप खिलवाड़ के बिना प्रत्येक टैग वाले पूरे लाइन को हटा देगा।

16

आपको स्थिर स्ट्रिंग के लिए रेगेक्स की आवश्यकता नहीं है।

कुछ भी नहीं के साथ ग्रंथों के उन हिस्सों को बदलें:

$string = str_replace("//<![CDATA[","",$string); 
$string = str_replace("//]]>","",$string); 
+0

क्या होगा यदि यह उस पाठ को 'स्क्रिप्ट' निकाय के हिस्से के रूप में शामिल करता है, शायद एक स्ट्रिंग के रूप में? – alex

+0

मुझे इस समाधान को रेगेक्स विकल्प से कहीं बेहतर पसंद है, पढ़ने के लिए बहुत साफ है। –

0

उपयोग str_replace()preg_replace() के बजाय यह बहुत आसान है

$var = str_replace('<![CDATA[', '', $var); 
$var = str_replace(']]','',$var); 
echo $var; 
1

तुम भी कोशिश कर सकते हैं,

$s=str_replace(array("//<![CDATA[","//]]>"),"",$s); 
0

मैं की तरह उपयोग करें यह <![CDATA[]] को हटाने के लिए, लेकिन एकल लाइन पर अब मेरे लिए काम करें , नहीं पता कि एकाधिक लाइन स्ट्रिंग के लिए।

preg_match_all('/CDATA\[(.*?)\]/', $your_string_before_this, $datas); 
$string_result_after_this = $datas[1][0]; 
0
$nodeText = '<![CDATA[some text]]>'; 
$text = removeCdataFormat($nodeText);  

public function removeCdataFormat($nodeText) 
{ 
    $regex_replace = array('',''); 
    $regex_patterns = array(
     '/<!\[CDATA\[/', 
     '/\]\]>/' 
    ); 
    return trim(preg_replace($regex_patterns, $regex_replace, $nodeText)); 
} 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^