首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将php短标签转换为完整标记?

如何将php短标签转换为完整标记?
EN

Stack Overflow用户
提问于 2010-09-01 06:32:40
回答 6查看 6.9K关注 0票数 1

我要编辑另一个在他的脚本中到处使用php短标签的人的项目。我在服务器上禁用了短标签。我认为转换所有短标记而不是在我的服务器中启用短标记是更好的方法。

那么哪条路走得更好:

  1. 转换所有短标签?
  2. 在我的服务器上启用短标签?
  3. 如何将所有短标签批量转换为完整标记?
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-09-01 06:42:59

转换可以使用http://php.net/manual/en/function.token-get-all.php编写。与查找和替换不同,这不影响XML声明等等。转换与启用ST:这取决于。许多程序员可能更喜欢https://meta.stackoverflow.com/of“标准”-way取决于情况。

票数 4
EN

Stack Overflow用户

发布于 2010-09-01 06:55:57

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

代码语言:javascript
运行
复制
<?= $myvar1, $myvar2 ?>

这相当于:

代码语言:javascript
运行
复制
<? echo $myvar1, $myvar2 ?>

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

代码语言:javascript
运行
复制
<?php echo $myvar1, $myvar2 ?>

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

围绕全部()编写一些代码是最安全的选择(正如我在这里详细介绍的那样),但是您可能可以使用一个简单的sed脚本:

代码语言:javascript
运行
复制
sed -e 's/<?\([ \t\r]\)/<?php\1/g' \
    -e 's/<?$/<?php/g' \
    -e 's/<?=\([ \t\r]\)\?/<?php echo \1/g'

只需注意代码中的字符串(特别是正则表达式),这些字符串的<?序列后面可能是空格字符。还请参阅:用于sed的有用的一行脚本,其中指出sed语法各不相同,而且有些不支持\t代码(但可以输入实际的选项卡字符)。

n.b.请注意,sed不使用Perl regexes,而且这里至少有一个其他回复具有无效的sed语法:例如,Perl中的\?是一个字面问号,但他打算使用?,这是sed中的一个字面问号。(他还将<?=替换为<?php,错误地省略了“echo”。)

票数 3
EN

Stack Overflow用户

发布于 2010-09-01 19:56:36

我看了看更多,我修改了我先前的答案:“绝对转换它”。下面的PHP转换器很简单.确保您在上面运行的系统配置了short_open_tag=on

代码语言:javascript
运行
复制
#!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;
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3615531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档