我如何将PHP短标签转换为完整的标签

这个问题在这里已经有了答案:

  • PHP短标签是否可以使用? 25个答案

  • 转换可以使用http://php.net/manual/en/function.token-get-all.php编写。 与查找和替换不同,这不会影响XML声明等。 转换与启用ST:这取决于。 许多程序员可能更喜欢<?php to <?,所以当你转换时,你的代码会更“标准”。 但是,重要的https://meta.stackoverflow.com/of“标准”取决于具体情况。


    对于其他人来说,KoolKabin指的是使用<? 而不是<?php作为php代码的开始标记,通常以这种缩写形式使用:

    <?= $myvar1, $myvar2 ?>
    

    这等同于:

    <? echo $myvar1, $myvar2 ?>
    

    当服务器在php.ini中使用short_open_tag = on进行配置时,它本身就等同于此:

    <?php echo $myvar1, $myvar2 ?>
    

    就个人而言,我会转换所有的短标签,除非有许多页面只有短标签。

    围绕token_get_all()编写一些代码是最安全的选择(正如我在这里单独回答的详细信息),但是您也许可以用一个简单的sed脚本逃脱:

    sed -e 's/<?([ tr])/<?php1/g' 
        -e 's/<?$/<?php/g' 
        -e 's/<?=([ tr])?/<?php echo 1/g'
    

    只要注意你的代码中的字符串(特别是正则表达式),可能有<? 序列后跟一个空格字符。 另请参阅:sed的有用单行脚本,其中指出sed语法各不相同,有些脚本不支持t代码(但您可以键入实际的制表符)。

    请注意, sed不使用Perl正则表达式,并且至少有一个其他答案在这里有无效的sed语法:例如? 在Perl中是一个字面问号,但他打算? ,这是sed中的文字问号。 (他还用<?php替换<?= ,错误地省略了“echo”)。


    我看了更多,我修改了我以前的答案:“绝对地转换它”。 下面的PHP-CLI转换器很容易。 确保您运行的系统是使用short_open_tag=on配置的。

    #!php-cli
    <?php
    global $argv;
    
    $contents = file_get_contents($argv[1]) or die;
    $tokens = token_get_all($contents);
    $tokens[] = array(0x7E0F7E0F,"",-1);
    
    foreach($tokens as $ix => $token) {
      if(is_array($token)) {
        list($toktype, $src) = $token;
        if ($toktype == T_OPEN_TAG) {
          if (($src == "<?") && ($tokens[$ix+1][0] != T_STRING)) {
            $src = "<?php";
            if ($tokens[$ix+1][0] != T_WHITESPACE) {
              $src .= " ";
            }
          }
        }
        else if($toktype == T_OPEN_TAG_WITH_ECHO) {
          $src = "<?php echo";
          if($tokens[$ix+1][0] != T_WHITESPACE) {
            $src .= " ";
          }
        }
        print $src;
      }
      else {
        print $token;
      }
    }
    
    链接地址: http://www.djcxy.com/p/59425.html

    上一篇: How do i convert php short tag to full one

    下一篇: PHP short open tag vs long open tag