【问题标题】:Best practice for outputting larger amounts of dynamic HTML from PHP从 PHP 输出大量动态 HTML 的最佳实践
【发布时间】:2018-01-23 16:18:31
【问题描述】:

用 PHP 从数据库中导出大量 HTML 的最佳做法是什么?我正在构建一个非常简单的动态 CMS,并打算从 MySQL 数据库中加载输入类型、id 等。

我的问题是只使用如下所示的示例代码的回显,这是显示 HTML 的绝对最佳方法,假设我已经从数据库中收集了信息?

for ($x = 0; $x < 3; $x++)
    {
        echo '
            <div class="form-group">
                <label for="exampleInputPassword1">Password</label>
                <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
              </div>
        ';
    }

【问题讨论】:

  • 就我个人而言,如果我必须输出大量 HTML,我会避免使用 echoprint,因为当您将它们与花括号和分号结合使用时,它们会非常丑陋且难以阅读。相反,我将 PHP 的 alternative syntax for control structures 与短回显标签 &lt;?= ?&gt; 混合使用。
  • 默认情况下,php web 服务器的数据传输限制为 2MB,超时时间为 30 秒,因此如果您在 echo 中有大量数据,那么您的脚本将无响应,为了避免这种情况最好使用不同的技术(如 ajax 等)从数据库中获取数据。您的技术仅适用于少量数据。
  • 怀疑这可能会因为太宽泛主要基于意见而被关闭......你不是在寻求解决问题的方法一段特定的代码 - 关于设计模式的更多意见。

标签: php html


【解决方案1】:

我可能会问一些关于清理和 html 编码的难题,这可能会让你自己暴露在 XSS 面前

您是否可以完全控制 HTML 或者用户可以输入它?

能否使用markdown或其他一些语言来帮助防止攻击者运行恶意css/js?

如果不是,您可能需要像 HTML Purifier 这样的重手,这可能会影响性能

就输出而言,我建议需要一个单独的 PHP 文件并将其用作“模板”文件,因为 PHP 是一种模板语言。

其他开发人员可能会加入并推荐一种组合语言 (DSL) 来呈现在某个阶段本质上将成为 PHP 的内容,这些语言应该在默认情况下在变量上提供 htmlspecialchars 并缓存以换取他们的 DSL

如果您不确定自己在做什么,这可能会更好

如果您要输出预定义的块,您可以将这些块作为函数名称存储在数据库中,然后在输出时通过 db 动态调用这些函数以呈现块

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2015-05-25
    • 1970-01-01
    相关资源
    最近更新 更多