Создать строку, начинающуюся с http: // clickable - PullRequest
1 голос
/ 29 июня 2009

Нужно создать строку, начинающуюся с http: // или www clickable.

str_replace("http://", "$string", "<a href='$string'>");
str_replace("www", "$string", "<a href='$string'>");

Разве это не должно быть что-то подобное?

Ответы [ 7 ]

3 голосов
/ 29 июня 2009

Вы ищете что-то подобное?

<?php
$content = 'this is a test http://www.test.net www.nice.com hi!';

$regex[0] = '|(http://[^\s]+)|i';      
$replace[0] = '<a href="${1}">${1}</a>';

$regex[1] = '| (www[^\s]+)|i';
$replace[1] = ' <a href="http://${1}">${1}</a>';

echo preg_replace($regex, $replace, $content);
?>

Обновление Спасибо macbirdie за указание на проблему! Я пытался это исправить. Однако это работает только до тех пор, пока перед www есть пробел. Может быть, кто-нибудь придумает что-нибудь более умное и элегантное.

2 голосов
/ 29 июня 2009

Что-то, что я использую:

function linkify_text($text) {
  $url_re = '@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@';
  $url_replacement = "<a href='$1' target='_blank'>$1</a>";

  return preg_replace($url_re, $url_replacement, $text);
}

Надеюсь, это поможет.

1 голос
/ 29 июня 2009
function clicky($text) {
    $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_+.~#?&//=]+)', '<a href="$1">$1</a>', $text);
    $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)', '$1<a href="http://$2">$2</a>', $text);
    $text = eregi_replace('([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})', '<a href="mailto:$1">$1</a>', $text);
    return $text;
}
0 голосов
/ 29 июня 2009

Решение Меркуро с несколькими настройками.

<?php
$content = 'this is a test http://www.test.net www.nice.com hi!';

$regex[0] = '`(|\s)(http://[^\s\'\"<]+)`i';      
$replace[0] = '<a href="${2}">${2}</a>';

$regex[1] = '`(|\s)(www\.[^\s\'\"<]+)`i';
$replace[1] = ' <a href="http://${2}">${2}</a>';

echo preg_replace($regex, $replace, $content);
?>

Узор:

(|\s)

Соответствует началу строки или пробела. Вы также можете использовать слово границы.

\b

Я добавил пару других символов, которые заканчивают URL, ", ', <. </p>

0 голосов
/ 29 июня 2009

str_replace имеет другой порядок аргументов (ваша версия заменит все вхождения http:// в <a href='$string'> на $string).

если вы хотите создать html-ссылки внутри какого-либо другого текста, вам нужны регулярные выражения для этого вместо обычной замены:

preg_replace('/(http:\/\/\S+/)', '<a href="\1">\1</a>', $subject_text);
0 голосов
/ 29 июня 2009

То, что вы ищете, является регулярным выражением. Как то так ...

$link = preg_replace('/(http:\/\/[^ ]+)/', '<a href="$1">$1</a>', $text);
0 голосов
/ 29 июня 2009

Я вижу, что внутри тега привязки нет текста, что делает его невидимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...