我如何将PHP短标签转换为完整的标签
这个问题在这里已经有了答案:
转换可以使用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