HTML标记编码器

时间:2014-03-19 13:26:34

标签: php html

library.php

我自己的HTML标记编码器,它将根据输入打印HTML代码。

<?php
    function tag($tagname, $content = NULL, array $properties = NULL)
    {
        $html = "<$tagname";

        if (!($properties === NULL))
        foreach ($properties as $name => $value) {
            $html .= " $name=\"$value\"";
        }

        $html .= ($content === NULL || $content == "") ? " />" : ">$content</$tagname>";

        return $html;
    }
?>

的index.php

测试index.php文件,它将从库中运行HTML编码器。

<?php 
    require 'library.php';

    echo tag("head",
        tag("meta","",array("name"=>"title","content"=>"Test Print"))
    );
    echo tag("body",
        tag("div",tag("p","test print".tag("br")."test print"),array())
    );
?>

输出:

<head><meta name="title" content="Test Print" /></head><body><div><p>test print<br />test print</p></div></body>

问题:

使用此库可以在添加更多PHP代码时使我的代码更具可读性。我可以使用此<div><?php $variable ?></div>代替此echo tag("div",$variable);,但与仅键入HTML代码相比,后者肯定会更长。

我不应该创建这样的功能并继续使用HTML编码吗?

1 个答案:

答案 0 :(得分:1)

你是在正确的轨道上,但回声不是IMO工作的正确工具。

考虑XML通常我们可以代表这样的数据:

array('tag', $attributes, $children);

子元素的嵌套允许我们这样做(子元素是嵌套元素的数组,或者是简单文本子元素的字符串)。

array('div',
      array('class' => 'container'),
      array(array('span', array(), 'One'),
            array('span', array(), 'Two')));

代表:

<div class="container">
    <span>One</span>
    <span>Two</span>
</div>

使用XMLWriter我们可以毫不费力地编写这个结构。看看this图书馆。无论模板应出现在哪种上下文中,XMLWriter的输出始终都是正确缩进的。

这是将数据结构与您正在解决的问题进行匹配的典型示例。通过创建一个表示X(HT)ML的树,我们可以构建它们属于我们代码的结构组件,而不是被迫以正确的顺序获取所有的echo语句。