Изменить гиперссылки с помощью PHP - PullRequest
1 голос
/ 28 января 2010

Я использую регулярное выражение, чтобы превратить URL-адреса в комментариях блога в интерактивные гиперссылки.Тем не менее, я также хочу сделать наоборот:

Так как я разрешаю определенные HTML-теги (но не <a>), если кто-то печатает гиперссылку, я хотел бы изменить ее с:

<a href="http://www.example.com">My Link</a>

в

Моя ссылка : http://www.example.com

, где сгенерированный код:

<p><b>My Link:</b> <a href="http://www.example.com" rel="nofollow">http://www.example.com</a></p>

Спасибо!

Ответы [ 4 ]

5 голосов
/ 28 января 2010

Попробуйте с этим.

function find_links($url){
    $pattern = '/<a (.*?)href="(.*?)\/\/(.*?)"(.*?)>(.*?)<\/a>/i';
    $url = preg_replace_callback($pattern, 'process_links',$url);
    return $url;
}

function process_links($m){
    return "{$m[5]} <a href=\"{$m[2]}//{$m[3]}\" rel=\"nofollow\">{$m[2]}//{$m[3]}</a>";
}

$links = find_links('<a href="http://www.example.com">My Link</a>');

РЕДАКТИРОВАТЬ: Ой! Я не совсем дал ответ на вопрос ОП.

1 голос
/ 28 января 2010

Разбор неправильного языка с регулярным выражением - это короткий путь к неудаче. Вместо этого используйте правильный HTML-парсер .

0 голосов
/ 28 января 2010

Хорошо, если вы не возражаете против некоторых CSS (и вариантов реализации браузеров):

a {font-weight: bold; }
a:after {content: " (" attr(href) ") "; }

Должен частично достичь ваших целей, хотя при отображении текста ссылки не удалит ссылку. Так что, на самом деле, я думаю, что нет. К сожалению ...

0 голосов
/ 28 января 2010

Вам просто нужно найти либо www, либо http, а затем преобразовать этот текст, пока не достигнете пробела в URL.

Something like:
    $startPos = strpos( $input, "http" );
    $endPos = strpos( $input, " ", $startPos );
    $urlText = substr( $input, $startPos, $endPos - $startPos );

Я думаю, что скучаю, прочитав ваш вопрос немного ... что-то похожее на вышеприведенное, но вместо этого ищу.

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