我正在尝试让Cake
PHP输出一个如下所示的链接:
<a href="/foo/bar" class="some other classes"> <span class="icon new"></span>FooBar</a>
所以我在视图中使用以下代码
<?PHP echo $this->Html->link( $this->Html->tag('span',null,array('class' => 'icon new')) . "FooBar",array('controller' => 'foo','action' => 'bar'),array('class' => 'some other classes','escape' => false) ); ?>
<a href="/foo/bar" class="some other classes"> <span class="icon new">FooBar</span></a>
解决方法
您需要使用空字符串而不是null作为span的文本,然后您的代码将按预期工作.
查看HtmlHelper的源代码,null被视为“特殊”值,只会创建跨度的开始标记.你可以在这一行看到这个:
https://github.com/cakephp/cakephp/blob/2.3.2/lib/Cake/View/Helper/HtmlHelper.php#L906
echo $this->Html->link( $this->Html->tag('span','','escape' => false) );
关闭< / span>的附加说明
对于那些想知道的人,有点解释:
结束< / span>在你的例子中,实际上不存在于CakePHP生成的输出中,但是由浏览器自动“添加”.如果您在浏览器中查看HTML的来源,您会发现这实际上是HTML中的内容:
<a href="/foo/bar" class="some other classes"> <span class="icon new">FooBar</a>
如你所见,没有关闭’跨度’
因为< span>未关闭,浏览器将尝试更正此错误并自动假设您“忘记”关闭它.因此,它将添加一个结束< / span>在它找到的下一个标记之前(在这种情况下是结束< / a>).
浏览器中的“检查器”将始终显示浏览器用于呈现输出的HTML.这包括由浏览器和动态生成的元素(例如,通过JavaScript添加的元素)进行的自动更正.