【问题标题】:Add _blank to all external links [duplicate]将_blank添加到所有外部链接[重复]
【发布时间】:2012-06-25 02:18:09
【问题描述】:

可能重复:
Grabbing the href attribute of an A element
Parse All Links That Contain A Specific Word In "href" Tag

我正在使用以下函数将 _blank 添加到我网站上的所有链接。

function targetBlank($text) {
  $return = str_replace('<a', '<a target="_blank"', $text);
  return $return;
}

我正在寻找一种解决方案,仅将此功能应用于外部链接(而不是我的域)而不是所有链接。

【问题讨论】:

  • 这对于像&lt;a target="top"...这样的标签会失败;你最终会得到&lt;a target="_blank" target="top"... 等。这也会破坏&lt;abbr&gt;&lt;applet&gt;&lt;address&gt; 和任何其他以“a”开头的标签。
  • 如果要修复上面提到的...错误,请执行:return str_replace('&lt;a ', '&lt;a target="_blank" ', $text);

标签: php uri str-replace


【解决方案1】:

这是一个依赖$_SERVER['HTTP_HOST']的尝试解决方案:

function targetBlank($text) {
  if( strpos( $text, $_SERVER['HTTP_HOST'] ) === false )
      return str_replace('<a', '<a target="_blank"', $text);
  return $text;
}

未经测试,但它应该可以工作。 @meager 也是正确的,因为如果该标签已经定义了一个目标,这将产生格式错误的锚标签,但是,因为它只会对您传入的 html 字符串进行操作,所以 &lt;abbr&gt; 等等应该是安全的,只要你只传递带有锚标签的字符串。

【讨论】:

  • 如果已经有目标属性怎么办?正则表达式不是更好吗?
  • @tntu 正确,我在答案中指出(约 6 个月前)。
猜你喜欢
  • 2011-08-18
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 2021-02-12
  • 2012-08-16
  • 2018-02-27
  • 2013-03-29
  • 1970-01-01
相关资源
最近更新 更多