我应该删除HTML字符串的<script>
和CDATA内的所有内容。
我正在使用这样的代码:
$content = "
TEST1
<script type='text/javascript'>
/* <![CDATA[ */
var markers = [{'ID':3681,'post_author':'4'}]
/* ]]> */
</script>
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);
}
但这是行不通的。 什么都没有去除。
没关系,如果我使用正则表达式
$re = '/<script\b[^>]*>.*?<\/script>/is';
$str = 'TEST1
<script type=\'text/javascript\'>
/* <![CDATA[ */
var markers = [{\'ID\':3681,\'post_author\':\'4\'}]
/* ]]> */
</script>
TEST2';
$content= preg_replace($re, '', $str, 1);
是否可以使用PHP DOMDocument
而不是RegEx表达式删除此类内容?
使用Hatef答案进行编辑
$content = "
<script type='text/javascript'>
/* <![CDATA[ */
var _cf7 = {'recaptcha':{'messages':{'empty':'Merci de confirmer que vous n\u2019\u00eates pas un robot.'}},'cached':'1'};
/* ]]> */
</script>
<script type='text/javascript' src='https://www.test.com/includes/js/scripts.js'></script>
<script type='text/javascript'>
/* <![CDATA[ */
var pollsL10n = {'ajax_url':'https:\/\/www.test.com\/ajax.php','text_wait':'Your last request is still being processed. Please wait a while ...','text_valid':'Please choose a valid poll answer.','text_multiple':'Maximum number of choices allowed:','show_loading':'1','show_fading':'1'};
/* ]]> */
</script>
<!--[if lt IE 8]>
<script type='text/javascript' src='https://www..test.com/json2.min.js'></script>
<![endif]--><script type='text/javascript'>
/* <![CDATA[ */
var ajaxurl = 'https:\/\/.test.com\/ajax.php';
/* ]]> */
</script>
<script type='text/javascript' src='https://www.test.com/slider.min.js?x40297'></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-37273722-1', 'auto');
ga('send', 'pageview');
</script>
";
libxml_use_internal_errors(true);
$domDoc = new DOMDocument();
$domDoc->loadHTML($content);
libxml_clear_errors();
foreach($domDoc->getElementsByTagName('script') as $scripttag){
$scripttag->parentNode->removeChild($scripttag);
}
$content = $domDoc->saveHTML();
$content
包含
<!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"></script><!--[if lt IE 8]>
<script type='text/javascript' src='https://www..test.com/json2.min.js'></script>
<![endif]--><script type="text/javascript">
/* <![CDATA[ */
var ajaxurl = 'https:\/\/.test.com\/ajax.php';
/* ]]> */
</script><script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-37273722-1', 'auto');
ga('send', 'pageview');
</script></head></html>