这是我的PHP代码:https://eval.in/871659
1-我有一些带有javascript $content
第2行的HTML代码
2-我想将javascript代码提取到数组第17行
3-我有一些允许列表数组$allowed_js
(可以在我的HTML上的javascript代码)第20行
4-我想删除不允许的javascript 第26 - 35行
问题出在第4部分,因为我在foreach中使用foreach,每个javascript $matches array
检查为$allowd_js array
,这是真的,
但问题是,如果它检测到不允许的字符串,它会得到替换字符串,所以基本上对于每个javascript,只有一个允许的字(包含在$allowed_js array
中),所以在每种情况下它都会被替换
我也尝试使用break
,但它无效
另外,我尝试了这个循环,但它也不起作用
$allow_count = count($allowed_js)-1;
foreach ($matches[0] as $key => $value) {
for ($i = 0; $i <= $allow_count ; $i++) {
if (strpos($value,$allowed_js[$i]) == false) {
$content = str_replace($value,"",$content);
//break;
}
}
}
答案 0 :(得分:1)
您可以使用flag变量。请尝试下面的代码
<?php
$content = '<br>
<script src="https://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<h1> some html codes</h1>
<script src="googlead.com/abc.js"></script>
<h2> etc </h2>
<script src="site1.com/sdfffe.js"></script>
<!-- comment -->
<script src="site2.com/something.js"></script>
<p>123</p>
<script src="site3.com/xyz.js"></script>
<script src="site4.com/qwerty.js"></script>
<script src="site5.com/sdfffe.js"></script>
';
# extract javascripts to array
preg_match_all('~<script.*?</script>~si',$content,$matches);
$allowed_js = array(
"googlecode",
"googlead"
);
foreach ($matches[0] as $key => $value) {
$valid = 0;
foreach ($allowed_js as $aval) {
if (strpos($value,$aval) !== false) {
#it's detected as allowed , so nothing to do
$valid = 1;
}
}
if($valid == 0){
$content = str_replace($value,"",$content);
}
}
echo $content;