【问题标题】:PHP echo $this->item->link in a href not working - showing JObject->linkPHP echo $this->item->link in a href 不起作用 - 显示 JObject->link
【发布时间】:2016-02-01 15:25:58
【问题描述】:

快速提问,因为我正在倾听!

在 PHP 文件中,我提取了不同的项目,例如联系方式等。我通过 $this->item->link 提取了一个完美的 URL。我只是想让网址可点击,所以我有以下代码:

echo "<a href='$this->item->contactlink' target='new'>";
echo $this->item->contactlink;
echo '</a>';

此链接无效,停留在站点内并显示 404,并且 URL 类似于:http://domain.co.uk/JObject->contactlink

为了使链接可点击,我可以做些什么或错过了什么?

亲切的问候 利亚姆

【问题讨论】:

  • php运行后的html是什么样子的?
  • 页面加载正常,只是如果您将鼠标悬停或单击链接,它会尝试转到domain.co.uk/JObject->link,而不是转到实际链接。显然该 url 不存在,所以它显示 404。
  • 在你的问题中你这样说:“我已经通过 $this->item->link 显示了一个完美的 URL” 是这样的吗:$this-&gt;item-&gt;link或者这个:$this-&gt;item-&gt;contactlink。无论哪种情况,您能否提供每个结果的echo
  • 我假设你正在使用 Joomla。

标签: php html web


【解决方案1】:

您遇到了 PHP 解析器故障:这不是“贪婪”。在 " 引用的字符串中使用嵌套对象引用或多维数组只会将对象或数组的第一个“维度”解析为对象/数组的一部分:

php >  class z { function __toString() { return get_class($this); } }
php > $x = new z();
php > $x->foo = new z();
php > $x->foo->bar = new z();
php > echo "$x // $x->foo // $x->foo->bar";
z // z // z->bar

注意回声最后部分的z-&gt;bar。 PHP 解析器看到 $x-&gt;foo 并在那里停止解析,将 -&gt;bar 保留为纯文本,而不是对象的一部分。

您需要使用{}-扩展字符串语法:

php > echo "$x // $x->foo // {$x->foo->bar}";
z // z // z

注意-&gt;bar 没有得到输出。

同样适用于数组:

$foo['bar']['baz'] = 'qux';
echo "$foo[bar][baz] {$foo['bar']['baz']}";
PHP Notice:  Array to string conversion in php shell code on line 1
Array[baz] qux

注意$foo['bar'] 如何在第一部分变成单词Array,而qux 在第二部分正确输出。

【讨论】:

  • 感谢 Marc 的解释。我有点迷茫,但必须阅读更多相关信息!
【解决方案2】:

试试:

 <a href="<?php echo $this->item->contactlink; ?>" target='_blank'>
    <?php echo $this->item->contactlink; ?>
 </a> 

或更短的版本:

 <a href="<?= $this->item->contactlink; ?>" target='_blank'>
    <?= $this->item->contactlink; ?>
 </a> 

Target='new' 可能是问题的一部分 - 我相信 target=_blank 是标准的。在没有看到你如何构建“$this”的情况下,不是 100% 解决这个问题。将 php 元素从 html 中拉出也有助于清除链接引用。也许链接有额外的报价?

【讨论】:

  • "try" 不是答案。提供详细信息,并解释为什么这是一个答案以及它如何解决他们的问题。
  • @CodeGodie 如果它有效,那绝对是一个答案。但为了您的观看乐趣,我添加了更多解释。
  • 它不是为了我的观赏乐趣。这是一个社区。当你写一个答案时,你需要以一种有助于原始帖子的方式编写它,但也有助于任何未来寻找相同答案的用户。感谢您更新您的答案。
  • 您的解决方案效果很好,谢谢。代码在 if 语句中,我使用的是 echos,所以我在 if 开头的末尾添加了“:?>”,并且可以使用普通的 HTML。然后我添加了您的代码,它完全按照我的意愿工作。谢谢!
猜你喜欢
  • 2015-10-16
  • 2010-11-30
  • 1970-01-01
  • 2023-02-02
  • 2017-02-21
  • 2023-03-25
  • 2017-06-03
  • 1970-01-01
  • 2022-12-02
相关资源
最近更新 更多