gpt4 book ai didi

html - anchor 标记内的 CakePHP 跨度标记

转载 作者:太空狗 更新时间:2023-10-29 16:07:41 25 4
gpt4 key购买 nike

我试图让 CakePHP 输出一个看起来像这样的链接:

 <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)
);
?>

但是 CakePHP 输出如下:

<a href="/foo/bar" class="some other classes">
<span class="icon new">FooBar</span></a>

这打破了我的设计。我怎样才能让 CakePHP 在 <span> 之后附加“FooBar”?标签?

编辑:还值得一提的是,我知道一个 <span>标签通常不应位于 anchor 标签内,但在某些情况下是必须的。

最佳答案

您需要使用一个空字符串来代替 null作为跨度的文本,那么您的代码将按预期工作。

查看 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', '', array('class' => 'icon new')) . "FooBar",
array('controller' => 'foo', 'action' => 'bar'),
array('class' => 'some other classes', 'escape' => false)
);

结束的补充说明</span>

一些解释,对于那些想知道的人:

结束 </span>在您的示例中,CakePHP 生成的输出中实际上不存在,但您的浏览器会自动“添加”。如果您在浏览器中查看 HTML 的源代码,您会发现这就是您的 HTML 中的实际内容:

<a href="/foo/bar" class="some other classes">
<span class="icon new">FooBar</a>

如您所见,没有结束“span”

因为 <span>未关闭,浏览器将尝试更正此错误并自动假定您“忘记”关闭它。因此,它将添加一个关闭 </span>在它找到的下一个标签之前(在本例中为结束 </a> )。

浏览器中的“检查器”将始终显示浏览器使用 呈现输出的 HTML。这包括由浏览器动态生成的元素(例如通过 JavaScript 添加的元素)进行的自动更正。

要检查 PHP 脚本的输出,请始终查看,而不是检查器

关于html - anchor 标记内的 CakePHP 跨度标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15989096/

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