如何回显包含<! - ?php? - >的字符串

时间:2014-09-09 19:42:08

标签: php

我想生成一个包含HTML和一些php命令的php页面。问题是当我提交下面的代码时,我得到了这个输出

<?php echo '$stfromyearErr  '?><?php echo '$stfrommonthErr  '?><?php echo '$stfromdayErr  '?> <?php echo '$sttoyearErr  '?><?php echo '$sttomonthErr  '?><?php echo '$sttodayErr  '?>

而不是php命令。我该如何解决?? 谢谢!

<?php

$page = "<html lang='en'> <head> <meta charset='utf-8' /> </head>
<body><table width='990' border='0' align='center'><tr><td width='54%' colspan='2'>
<span class='error'>&lt?php echo '\$stfromyearErr &nbsp;';?&gt&lt?php echo '\$stfrommonthErr
&nbsp;';?&gt&lt?php echo '\$stfromdayErr &nbsp;';?&gt &lt?php echo '\$sttoyearErr &nbsp;';?
&gt&lt?php echo '\$sttomonthErr &nbsp;';?&gt&lt?php echo '\$sttodayErr &nbsp;';?&gt</span></td>
</tr></table> </body></html>";  
echo $page; 
?>

4 个答案:

答案 0 :(得分:1)

您将PHP标记回显为&lt;?php,然后可能会在浏览器中显示该标记。它会像浏览器中的php代码一样 LOOK ,因为浏览器会将&lt;呈现为<,但它不是PHP代码。这只是一些文字。

PHP不是递归可执行的,例如。

<?php
   echo "<?php echo 'foo '; ?>";
?>

会回显<?p等......而不只是foo

你可以做像

这样的事情
<?php

    $foo = "<?php echo 'hello world!'; ?>";
    file_put_contents('hello.php', $foo);
?>

没有任何问题。只要您生成的文件实际上由PHP执行(例如,不要将其命名为“hello.html”),那么PHP将不知道(或者甚至不关心)该脚本是由某些其他php代码生成的。 / p>

答案 1 :(得分:0)

您将变量封装在单引号中,因此它们以纯文本形式输出,只需删除任何echo语句上的逗号即可解决此问题。

<?php echo $stfromyearErr; ?>

答案 2 :(得分:0)

如果要输出包含标记甚至语法突出显示的PHP代码,可以使用函数highlight_string()Documentation here

<?php
highlight_string("<?php echo '$stfromyearErr  '?><?php echo '$stfrommonthErr  '?><?php echo '$stfromdayErr  '?> <?php echo '$sttoyearErr  '?><?php echo '$sttomonthErr  '?><?php echo '$sttodayErr  '?>");
?>

答案 3 :(得分:0)

有两件事,首先删除引号:

<?php

$page = "<html lang='en'> <head> <meta charset='utf-8' /> </head>
<body><table width='990' border='1' align='center'><tr><td width='54%' colspan='2'>
<span class='error'>&lt?php echo $stfromyearErr &nbsp;?&gt&lt?php echo $stfrommonthErr
&nbsp;?&gt&lt?php echo $stfromdayErr &nbsp;?&gt &lt?php echo $sttoyearErr &nbsp;?
&gt&lt?php echo $sttomonthErr &nbsp;?&gt&lt?php echo $sttodayErr &nbsp;?&gt</span></td>
</tr></table> </body></html>";
echo $page;

?>

但是,这会给你:

<?php echo your_var_1  ?><?php echo your_var_2  ?><?php echo your_var_3 ?> <?php echo your_var_4  ? ><?php echo your_var_5  ?><?php echo your_var_6  ?>

这是因为php标签是多余的:你已经启动了php并在php中回应这些。

如果这是不可避免的,请尝试将其替换为:

echo str_replace("&nbsp;?&gt", "", str_replace("&lt?php echo", "", $page));