【问题标题】:foreach in foreach overwrite resultforeach 中的 foreach 覆盖结果
【发布时间】:2017-10-01 10:42:28
【问题描述】:

这是我的 PHP 代码:https://eval.in/871659

1- 我有一些带有 javascript $content line 2

的 HTML 代码

2- 我想提取 javascript 代码到数组 第 17 行

3- 我有一些允许列表数组$allowed_js(可以在我的 HTML 上的 javascript 代码)第 20 行

4- 我想删除不允许的 javascript line 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;
        }

    }
}

【问题讨论】:

    标签: php arrays foreach preg-match-all


    【解决方案1】:

    您可以使用标志变量。试试下面的代码

    <?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;
    

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 2018-07-13
      • 2018-02-01
      相关资源
      最近更新 更多