gpt4 book ai didi

php - 通过 PHP 插入 HTML 的最佳方法是什么?

转载 作者:IT王子 更新时间:2023-10-29 01:21:10 25 4
gpt4 key购买 nike

从“最佳实践”的角度来看,您认为使用 PHP 插入 HTML 的最佳方式是什么。目前我使用以下方法之一(主要是后者),但我很想知道您认为哪种方法最好。

<?php
if($a){
?>
[SOME MARKUP]
<?php
}
else{
?>
[SOME OTHER MARKUP]
<?php
}
?>

反对:

<?php
unset($out);
if($a) $out = '[SOME MARKUP]';
else $out = '[OTHER MARKUP]';
print $out;
?>

最佳答案

如果你打算那样做,你想把你的逻辑和设计分开,真的。

但您不需要使用 Smarty 来执行此操作。

优先级是关于心态。我看到有人在 Smarty 中做了令人震惊的事情,最终变成了在 Smarty 中开发网站的人,然后一些明亮的 Spark 会决定他们需要在 Smarty 中编写模板引擎(永远不要低估一个愚蠢的想法)。

如果您将代码分成两部分并强制自己遵守标准,那么您将获得更好的性能。

PageLogic.php

<?php 

$pageData = (object)(array()); // Handy trick I learnt.

/* Logic Goes here */


$pageData->foo = SomeValue;

ob_start();
require("layout.php");
ob_end_flush();

布局.php

 <html>
<!-- etc -->
<?php for ( $i = 1; $i < 10; $i++ ){ ?>
<?php echo $pageData->foo[$i]; ?>
<?php } ?>
<!-- etc -->
</html>

PHP 是作为模板引擎编写的,因此在评估是否需要深入研究 Smarty 之前,您至少应该尝试将其用于其设计任务。


此外,如果您决定使用模板引擎,请尝试使用 默认 转义 HTML 的引擎,然后您“选择退出”而不是“选择加入”。你会为自己省去很多 XSS 的麻烦。 Smarty 在这方面比较薄弱,也正因为如此,里面写了很多 content-naïve 的模板。

{if $cond}
{$dangerous_value}
{else}
{$equally_dangerous_value}
{/if}

通常是 Smarty 模板的运行方式。问题是 $dangerous_value 可以是任意 HTML,这只会导致更糟糕的编码实践,到处都是无法追踪的意大利面条代码。

您认为应该的任何模板语言都可以解决这个问题。例如:

{$code_gets_escaped} 
{{$code_gets_escaped_as_a_uri}}
{{{$dangerous_bare_code}}}

通过这种方式,您的潜在利用途径在模板中很容易识别,而利用途径是 DEFAULT 行为。

关于php - 通过 PHP 插入 HTML 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/261338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com