Вопрос по str-replace, php, uri – Добавить _blank ко всем внешним ссылкам [дубликаты]

2

Possible Duplicate:
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; abbr & gt ;, & lt; applet & gt; ..., упомянутую выше, выполните:return str_replace('<a ', '<a target="_blank" ', $text); Riki137
Это не удастся для тега, как<a target="top"...; вы получите<a target="_blank" target="top"... и т.д. Это также сломается<abbr>, <applet>, <address> и любые другие теги, которые начинаются с «a». meagar♦

Ваш Ответ

1   ответ
5

Вот попытка решения, которое опирается на$_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-строками, которые вы передаете, тогда<abbr> и так далее должно быть безопасно, если вы передаете только строки с тегами привязки в них.

Что если уже есть целевой атрибут? Не будет ли регулярное выражение лучше?
@tntu Правильно, на что я указал в ответе (~ 6 месяцев назад).

Похожие вопросы