【问题标题】:remove tag but keep string between tag in php删除标签但在php中的标签之间保留字符串
【发布时间】:2012-12-06 06:50:06
【问题描述】:

我有从我的其他网站获取内容的文件。它包括很多:

<script>
[random] string 1
</script>

<script>
[random] string 2
</script>
....
<script>
[random] string n
</script>

<script type="text/javascript">
must keeping script
</script>

<script type=text/javascript'>
must keeping script
</script>

我想删除 &lt;script&gt;&lt;/script&gt; 但使用 PHP 将它们之间的内容保留为“[random] string ...”。

注意:str_replace 可以删除它们,但可能会影响其他脚本&lt;script type="text/javascript"&gt;must keeping&lt;/script&gt;&lt;script type='text/javascript'&gt;must keeping&lt;/script&gt;。 它将丢失必须保留脚本的关闭标签&lt;/script&gt;

感谢您的帮助

//已解决:

$content = preg_replace('/(<script>)(.*?)(<\/script>)/s', '$2', $content);

不管怎样,谢谢你的帮助

【问题讨论】:

    标签: php string tags


    【解决方案1】:
    <?php
     $text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
     echo strip_tags($text);
    
     ?>
    

    要获取有关条形标签的更多信息,请参阅http://php.net/manual/en/function.strip-tags.php

    【讨论】:

      【解决方案2】:

      试试这个

      $content = "
          <script>
          [random] string 1
          </script>
      
          <script>
          [random] string 2
          </script>
          ....
          <script>
          [random] string n
          </script>    
      ";
      
      $content = str_replace(array("<script>", "</script>"), "", $content);
      

      编辑: 既然你想摆脱&lt;script&gt;&lt;/script&gt;,同时保留&lt;script type="text/javascript"&gt;&lt;/script&gt;,并且因为使用正则表达式来解决is a bad idea这类问题,那么尝试像这样使用DOMDocument

      $dom = new DOMDocument();
      
      $content = "
          <script>
          [random] string 1
          </script>
      
          <script>
          [random] string 2
          </script>
          ....
          <script>
          [random] string n
          </script>
      
          <script type='text/javascript'>
          must keeping script
          </script>
      
          <script type='text/javascript'>
          must keeping script
          </script>    
      ";
      
      $dom->loadHTML($content);
      $scripts = $dom->getElementsByTagName('script');
      
      foreach ($scripts as $script) {
          if (!$script->hasAttributes()) {
              echo $script->nodeValue . "<br>";
          }
      }
      

      这将输出:

      [随机] 字符串 1
      [随机] 字符串 2
      [随机] 字符串 n

      【讨论】:

        【解决方案3】:

        如果内容是字符串类型,则可以使用str-replacestr-ireplace

        【讨论】:

          【解决方案4】:

          然后试试strip_tags函数http://php.net/manual/en/function.strip-tags.php

          【讨论】:

            【解决方案5】:

            如果文件是 test.txt,则使用此代码

            <?php
            $myFile = "test.txt";
            $fh = fopen($myFile, 'r');
            $theData = fread($fh, 5000);
            echo str_replace("</script>","",str_replace("<script>","",$theData));
            fclose($fh);
             ?>
            

            【讨论】:

            • 谢谢,但丢失了 我必须保留的其他脚本,例如:
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-09
            • 1970-01-01
            • 2015-12-13
            • 2013-07-02
            • 2018-10-06
            • 2013-02-24
            相关资源
            最近更新 更多