代码之家  ›  专栏  ›  技术社区  ›  Alex

php-删除<?PHP?>字符串中的标记

  •  5
  • Alex  · 技术社区  · 14 年前

    从字符串中删除这些标记的最佳方法是什么,以便为传递给eval()做好准备?

    例如,字符串可以是这样的:

    <?php
      echo 'hello world';
      ?>
      Hello Again
      <?php
    
      echo 'Bye';
    ?>
    

    显然,str-replace不起作用,因为中间的两个php标记需要在那里(第一个和最后一个标记需要删除)。

    4 回复  |  直到 8 年前
        1
  •  4
  •   alex    11 年前

    听起来是个坏主意,但是如果你想去掉开头和结尾的,你可以这样做。

    $removedPhpWrap = preg_replace('/^<\?php(.*)(\?>)?$/s', '$1', $phpCode);
    

    这个 应该 执行(未测试)。

    请告诉我你为什么要这样做,我相信有更好的方法。

        2
  •  4
  •   CodeJoust    14 年前

    通常,您不希望将函数传递给eval。 如果您只想删除标签,string_replace可以很好地完成这项工作,但是您最好使用regex。

    preg_replace(array('/<(\?|\%)\=?(php)?/', '/(\%|\?)>/'), array('',''), $str);

    这包括旧的ASP标记、PHP短标记、PHP Echo标记和普通的PHP标记。

        3
  •  1
  •   shea    11 年前

    不需要使用regex;php提供了从字符串的开头或结尾删除字符的函数。 ltrim 从中删除字符 开始 弦乐, rtrim 结束 字符串的,以及 trim 从两端。

    $code = trim ( $code );
    $code = ltrim( $code, '<?php' );
    $code = rtrim( $code, '?>' );
    

    第一 trim() 删除选址中存在的任何前导或尾随空格。如果我们省略了这个,就会有空白 外部 字符串中的php标记,然后 ltrim rtrim 命令将无法删除php标记。

        4
  •  1
  •   theEpsilon    8 年前

    你可以这样做:

    eval("?> $string_to_be_evald <?");
    

    这将关闭隐式标记并使一切正常工作。