如何用 PHP 编写 PHP 代码?我想做这个,但行不通:
<?php echo '<?php echo \'aoeu\'; ?>'; ?>
希望有人能给我提示,
非常感谢
<?php echo htmlentities('<?php echo \'aoeu\'; ?>'); ?>
如果你输出一些复杂的代码,一定要使用像 smarty 这样的模板引擎..否则你的代码会看起来一团糟。
我曾经修补过 propel ORM,它在不使用模板引擎的情况下输出 PHP 代码。它根据 XML 配置文件生成所有模型类。他们的代码一团糟。别这样做。
试试这个
<<< is Heredoc
<?php
echo <<< EOF
<?php
echo <<< EOF
EOF;
?>
EOF;
?>
<?php echo '<?php echo \'aoeu\'; ?>'; ?>
如果您不转义“<' and '>”,它们将被打印为 html 标签。
你可以使用highlight_string或highlight_file,如果你使用highligh_file,你必须指出你想要显示的php文件
<?php
highlight_string('<?php echo\'hello\' ?>');
highlight_file("D:\local\ajax_bottom.php");
?>
或者您可以将两者结合起来,这对我来说是最好的解决方案:
<?php
$string=highlight_file("D:\local\hatirlaticilar\Adminn\autocomplete\gethint.php");
highlight_string("$string");
?>
或者你可以用不同的方式组合:
<?php
highlight_string(highlight_file("D:\local\hatirlaticilar\Adminn\autocomplete\gethint.php"));
?>
您需要做的就是转义字符串。你已经做对了。当然,除非您要输出 HTML,否则请使用 htmlspecialchars()。
<?php echo htmlspecialchars('<?php echo \'aoeu\'; ?>'); ?>
我假设您正在尝试显示
<?php ?>
标签?如果是这样,只需使用 <
而不是 <
这不能直接按照您发布的方式完成。
PHP 是一种服务器端脚本语言,我相信您知道。这意味着它在页面显示给用户之前执行。
实际上,您的代码将文本写入浏览器,而不是服务器。执行其他 php 代码生成的 php 代码的唯一方法是将新代码写入文件,然后在页面加载后运行该文件。
示例1
<?php echo '<pre>', highlight_string('<?php
include($_SERVER["DOCUMENT_ROOT"] . "/myclass/myform.php");
?>', true), '</pre>'; ?>
示例2
请参阅 php 手册高亮字符串
我不确定 php 引擎需要什么(我会采用其他发帖者的话来表示 htmlentities 可以工作),但是在最后使用 vim ?> 会让它看起来像是 php 代码部分已经结束。
我只是这样做:
string = "<? echo somefunc('strparam'); ?" . ">";
编辑很高兴。如果有更好的方法,请告诉我!
作为这里许多答案的总结,您可以通过将所有特殊字符更改为相应的 html 特殊代码来
echo
o print
php 和 html 代码。至少字符串中的所有“<”字符都应转换为“<”。有很多方法可以做到这一点:
echo htmlspecialchars("<b>\"á'");
>> <b>"á'
这会转换回显代码所需的所有字符。
echo htmlentities("<b>\"á'");
>> <b>"á'
这与
htmlspecialchars
相同,但也会转换具有相应 html 代码的所有字符。
值得注意的是
single
和 double quotes
具有不同的行为,因为 single quotes
不会解释其中的变量,也不会读取转义字符(单引号本身除外)。
$foo = "value";
echo "I replace $foo with value and \n with line break";
>> I replace value with value and
with line break
echo 'I don\'t replace $foo with value nor \n with line break';
>> I don't replace $foo with value nor \n with line break
您也可以使用 heredoc 语法,它与
double-quoted
字符串相同,但不需要在字符串内转义它们
echo <<<EOF
Your "string' here
EOF;
或 nowdoc 语法相同,但模仿
single-quoted
字符串
echo <<<'EOF'
Your "string' here
EOF;
您可以在这里阅读所有相关内容: https://www.php.net/manual/es/language.types.string.php
在您的情况下,您应该使用 htmlspecialchars 而不是 htmlentities - htmlspecialchars 只是更轻 - htmlspecialchars 只会将特殊字符(可能会导致 HTML 呈现问题)转换为其等效的 HTML 实体,例如 >,<, single/double quotes.
htmlspecialchars 将转换具有等效 HTML 实体的所有字符,例如 á、é 等...
两者都可以,而懒惰(低效)的决定是始终使用 htmlentities,而不考虑代码的上下文。
echo '<div class="row"><div class="col-md-6 col-md-offset-3"><div class="alert alert-success" role="alert"><p style="text-align: center;">'. php code goes here .'</p></div></div></div>';