我应该删除< script>
中的所有内容和HTML字符串的CDATA。
我正在使用这样的代码:


 $ content =“
 TEST1
< script type ='text / javascript'>
 / *< ![CDATA [* /
 var markers = [{'ID':3681,'post_author':'4'}]
 / *]]> * /
< / script&gt ;
 TEST2
“;

 libxml_use_internal_errors(true);
 $ domDoc = new DOMDocument();
 $ domDoc-> loadHTML($ content) ;
 libxml_clear_errors();

 foreach($ domDoc-> getElementsByTagName('script')as $ scripttag){
 $ scripttag-> parentNode-> removeChild($ scripttag);
}



 但它不起作用。什么都没有删除。


没关系,如果我正在使用这样的RegEx表达式
&#xA;&#xA; $ re ='/<script\b[^>]*>.*?<\/script>/is';
$str ='TEST1&#xA;&lt; script type = \'text / javascript \'&gt;&#xA; / *&lt;![CDATA [* /&#xA; var markers = [{\'ID \':3681,\'post_author \':\'4 \'}] &#xA; / *]]&gt; * /&#xA;&lt; / script&gt;&#xA; TEST2';&#xA;&#xA; $ content = preg_replace($ re,'',$ str,1);&#xA;
&#xA;&#xA; 是否可以使用PHP DOMDocument
而非RegEx表达式删除此类内容?
使用Hatef回答编辑
&#xA;&#xA; $ content =“&#xA;&lt; script type =' text / javascript'&gt;&#xA; / *&lt;![CDATA [* /&#xA; var _cf7 = {'recaptcha':{'messages':{'empty':'Merci de confirmer que vous n \ u2019 \ u00eates pas un robot。'}},'cached':'1'};&#xA; / *]]&gt; * /&#xA;&lt; / script&gt;&#xA;&lt; script type = 'text / javascript'src ='https://www.test.com/includes/js/scripts.js'>&lt; / script&gt;&#xA;&lt; script type ='text / javascript'&gt;& #xA; / *&lt;![CDATA [* /&#xA; var pollsL10n = {'ajax_url':'https:\ / \ / www.test.com \ /ajax.php','text_wait':'你的最后一个请求仍在处理中。请稍等...','text_valid':'请选择有效的民意调查答案。','text_multiple':'允许的最大选择数:','show_loading':'1' “show_fading ':'1'};&#xA; / *]]&gt; * /&#xA;&lt; / script&gt;&#xA;&lt;! - [if lt IE 8]&gt;&#xA;&lt; script type ='text / javascript'src ='https:// www ..test.com / json2.min.js'&gt;&lt; / script&gt;&#xA;&lt;![endif] - &gt;&lt; script type ='text / javascript'&gt;&#xA; / *&lt;![CDATA [* /&#xA; var ajaxurl ='https:\ / \ / .test.com \ /ajax.php';&#xA; / *]]&gt; * /&#xA;&lt; / script&gt;&#xA;&lt; script type ='text / javascript'src ='https://www.test.com/slider.min.js?x40297'&gt;&lt; /脚本&GT;&#XA;&LT;脚本&GT;&#XA; (函数(i,s,o,g,r,a,m){i ['GoogleAnalyticsObject'] = r; i [r] = i [r] || function(){&#xA;(i [r ] .q = i [r] .q || [])。push(arguments)},i [r] .l = 1 * new Date(); a = s.createElement(o),&#xA; m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a,m)&#xA;})(窗口,文档,'脚本','https ://www.google-analytics.com/analytics.js','ga');&#XA;&#XA; ga('create','UA-37273722-1','auto');&#xA; ga('send','pageview');&#xA;&lt; / script&gt;&#xA;“;&#xA;&#xA; libxml_use_internal_errors(true);&#xA; $ domDoc = new DOMDocument() ;&#xA; $ domDoc-&gt; loadHTML($ content);&#xA; libxml_clear_errors();&#xA;&#xA; foreach($ domDoc-&gt; getElementsByTagName('script')as $ scripttag){ &#xA; $ scripttag-&gt; parentNode-&gt; removeChild($ scripttag);&#xA;}&#xA; $ content = $ domDoc-&gt; saveHTML();&#xA;
&#xA;&#xA; $ content
包含
&lt;!DOCTYPE html PUBLIC“ - / / W3C // DTD HTML 4.0 Transitional // EN“”http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><script type =“text / javascript”src =“https://www.test.com/includes/js/scripts.js”&gt;&lt; / script&gt;&lt;! - [if lt IE 8]&gt;&# xA;&lt; script type ='text / javascript'src ='https://www..test.com/json2.min.js'>&lt; / script&gt;&#xA;&lt;![endif] - - &gt;&lt; script type =“text / javascript”&gt;&#xA; / *&lt;![CDATA [* /&#xA; var ajaxurl ='https:\ / \ /。test.com \ / ajax .php';&#xA; / *]]&gt; * /&#xA;&lt; / script&gt;&lt; sc RIPT&GT;&#XA; (函数(i,s,o,g,r,a,m){i ['GoogleAnalyticsObject'] = r; i [r] = i [r] || function(){&#xA;(i [r ] .q = i [r] .q || [])。push(arguments)},i [r] .l = 1 * new Date(); a = s.createElement(o),&#xA; m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a,m)&#xA;})(窗口,文档,'脚本','https ://www.google-analytics.com/analytics.js','ga');&#XA;&#XA; ga('create','UA-37273722-1','auto');&#xA; ga('send','pageview');&#xA;&lt; / script&gt;&lt; / head&gt;&lt; / html&gt;&#xA;
&#xA;
答案 0 :(得分:1)
您的DOMDocument
解决方案完美无缺;你只是错过了实际保存HTML的最后一行:
$content = $domDoc->saveHTML();
正如您可能已经知道的那样,not to use regex to parse HTML会更好。
这个应该适用于你的新例子:
$scriptTags = $domDoc->getElementsByTagName('script');
while($scriptTags->length > 0){
$scriptTag = $scriptTags->item(0);
$scriptTag->parentNode->removeChild($scriptTag);
}