我自己的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
将运行库中的HTML编码器的测试
index.php
文件。<?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 楼
您处在正确的轨道上,但是echo并不是执行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,我们可以编写此结构而没有太多麻烦。我在我的图书馆里这样做。无论模板应出现在什么上下文中,XMLWriter的输出总是正确缩进。这是使数据结构与要解决的问题相匹配的经典示例。通过创建代表X(HT)ML的树,我们可以构建结构组件在代码中所处的位置,而不是被迫以正确的顺序获取所有回显语句。
#2 楼
坚持使用HTML和嵌入式PHP有几个优点:您将获得适当的语法突出显示。
您可以利用代码完成功能。
PHP方法在代码中以及在呈现时缺乏对HTML元素的适当缩进。
可以在浏览器中查看(某种程度上)文件。
设计人员可以修改HTML,只要他们知道如何识别
话虽如此,使用PHP方法,您可以在一处处理适当的HTML转义属性值(尽管您没有),以执行正确的规则。
我构建了一些帮助程序类,用于从
Image
和ContentItem
模型对象生成当前项目的图像和文章链接元素。这些类具有为属性命名的setter方法,并在执行正确的HTML转义时从基础模型对象中提取合理的值。页面的大部分是HTML和PHP,但是这些类使嵌入链接或图像非常容易:<div>
Here is a picture of the car:
<br/>
<?= $this->img($car->getImage())->alt($car->getDescription()) ?>
</div>
#3 楼
使用htmlentities()
转义内容和属性值是绝对关键的。否则,您可能会得到无效的输出,或者在最坏的情况下可能会出现HTML注入漏洞。 (您也许可以相信标记名和属性名不包含特殊字符。)
评论
我只想使用可读性更高的注释,并在注释中注释较小的注释,然后在生产版本中取消注释并最小化整个内容。并且当跟踪错误或更新时,我会使用原始的更改,然后使用更改,重复取消注释和最小化的过程我会说你已经给自己写了一个宏。