views.php
<a href="<?= URL::site(); ?>feeds/view/<?php echo $feed->feed_id; ?>">
<p class="feed-text" style="word-wrap:break-word;">
<?php if($feed_text = preg_replace('!(http|ftp|scp)(s)?:\/\/[a-zA-Z0-9.=?&_/]+!', "<a style=text-decoration:underline;color:blue href=\"\\0\" target='_blank' >\\0</a>",$feed->feed_text)):
echo nl2br($feed_text);
else:
echo nl2br($feed->feed_text); endif;?>
</p>
</a>
上面的视图代码是显示文本和网址。如果用户仅发布文本,则else部分将起作用,如果用户将文本与管道URL一起发布,则第一个条件有效。
如果用户发布文本,点击该文本会将用户带到另一个页面。如果用户同时发布两个文本,也适用于管网址。如果单击文本,则应将他带到下一个屏幕。
问题是,如果用户将文字与你的管网址一起发布,如果你的管网址存在于文本之间,你管网址后的文字就会丢失锚标签。但是,如果帖子中包含你的管道链接文本(文本结束后),锚标记正常工作。
问题的例子:
十只小猴子在床上跳。 。 。并踩过泰迪熊,http://www.youtube.com/watch?v=38hnsgqf8O0在香蕉皮上滑倒,从码头上掉下来!
&#34>在香蕉皮上滑倒,从码头上掉下来!&#34;锚标签不起作用。其他案例的工作正常。
如何解决这个问题
答案 0 :(得分:0)
尝试将display:block;
样式添加到锚标记:
<a style="display:block;" href="<?= URL::site(); ?>feeds/view/<?php echo $feed->feed_id; ?>">
仅在HTML5中有效(请参阅Can a <p> tag in <a> tag?)
但是,如果用户在文本中添加了一个url,那么就无法通过这种方式完成。 <a>
元素可能不是另一个<a>
元素的后代。
然而,有一种方法可以做到这一点。您可以通过插入的URL拆分文本,并将每个部分包装在<a>
包装器中。所以html将具有如下结构:
<p>
<a href="<?= URL::site(); ?>feeds/view/<?php echo $feed->feed_id; ?>">
text_part_1
</a>
<a href="http://www.youtube.com/watch?v=38hnsgqf8O0">http://www.youtube.com/watch?v=38hnsgqf8O0</a>
<a href="<?= URL::site(); ?>feeds/view/<?php echo $feed->feed_id; ?>">
text_part_2
</a>
</p>