|
|
|
| Как перевести адрес типа sub.domen.ru или http://sub.domen.ru в ссылку? Приэтом домен может быть не тока третьего но и второго и пятого уровня | |
|
|
|
|
|
|
|
для: Елена Смирнова
(07.05.2008 в 23:13)
| | :)
неочен понятно в какую ссылку перевести
можетбыть имеется ввиду такое
<?php
$domen = 'sub.domen.ru';
echo $ssylka = '<a href="http://' . $domen . '">' . $domen . '</a><br/>' . "\n";
?>
|
?
/
забыл добавить проверку if (substr($domen, 0, 7) == 'http://') $domen = 'http://' . $domen; | |
|
|
|
|
|
|
|
для: Елена Смирнова
(07.05.2008 в 23:13)
| |
<?php
function _make_link($s)
{
if( strpos(strtolower($s), 'http:') !== 0 )
{
$s = 'http://' . $s;
}
return '<a href="' . $s . '">' . $s . '</a>';
}
$s = 'Как перевести адрес типа sub.domen.ru или http://sub.domen.ru в ссылку?';
$domain = 'domen.ru';
$s = preg_replace('/(http:\\/\\/)?([a-z_0-9-]+\\.)*' . preg_quote($domain) . '(:\\d+)?(\\/[a-z0-9_.\\/#%;&?]*)?/ei', '_make_link("\\0")', $s);
echo $s;
?>
|
P.S. Если Вы хотели любые "адреса" вида sub.example.com, а не конкретного домена, то я считаю это неправильным и показывать не буду.
P.P.S. На мой паттерн замены URL особо не надейтесь. | |
|
|
|
|
|
|
|
для: Atheist
(07.05.2008 в 23:34)
| | Может кому понадобится.
Сделала так:
<?
$text = eregi_replace("((http://))((([a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z;]{2,3}))|(([0-9]{1,3}\.){3}([0-9]{1,3})))((/|\?)[a-z0-9~#%&'_\+=:;\?\.-]*)*)", "<a href=\"\\1\\3\">\\1\\3</a>", $text);
?>
|
| |
|
|
|
|
|
|
|
для: Елена Смирнова
(08.05.2008 в 01:04)
| |
<?php
$text="текст www.yandex.ru/r.php?gh=6 текст2 http://rambler.ru текст3 http://www.yahoo.ru текст4";
$result=preg_replace("#((http://)?(www)?[a-z\d._-]+\.[a-z]{1,6}/?([a-z\d\?=&\._-]*))#is", "<a href=\"\\1\">\\1</a>",$text);
print $result;
?>
|
| |
|
|
|
|
|
|
|
для: Елена Смирнова
(07.05.2008 в 23:13)
| | Возможно Вас заинтересует
<?php ## "Активизация" HTML-ссылок.
$text = 'Ссылка:(http://domain.com,) http://test.test.test.test.test.ru, www.test.test.test.test.test.ru, www.ru?"a"=b, http://site.net. http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=53188';
echo hrefActivate($text);
// Функция обратного вызова для preg_replace_callback().
function hrefCallback($p) {
// Преобразуем спецсимволы в HTML-представление.
$name = htmlspecialchars($p[0]);
// Если нет протокола, добавляем его в начало строки.
$href = !empty($p[1])? $name : "http://$name";
// Формируем ссылку.
return "<a href=\"$href\">$name</a>";
}
// Заменяет ссылки на их HTML-эквиваленты ("подчеркивает ссылки").
function hrefActivate($text) {
return preg_replace_callback(
'{
(?:
(\w+://) # протокол с двумя слэшами
| # - или -
www\. # просто начинается на www
)
[\w-]+(\.[\w-]+)* # имя хоста
(?: : \d+)? # порт (не обязателен)
[^<>"\'()\[\]\s]* # URI (но БЕЗ кавычек и скобок)
(?: # последний символ должен быть...
(?<! [[:punct:]] ) # НЕ пунктуацией
| (?<= [-/&+*] ) # но допустимо окончание на -/&+*
)
}xis',
"hrefCallback",
$text
);
}
?>
|
P.S. Правда на: sub.domen.ru (без www, http://) cрабатывать не будет и на ftp.domain.ru то же | |
|
|
|
|
|
|
|
для: Незнайка
(08.05.2008 в 13:11)
| | здесь бывали похожие темы
похоже сложнее найти адрес чем заменить.
сравнительный анализ приведённых выражений :)
<pre><?
$ptrn[] = "#((http://)?(www)?[a-z\d._-]+\.[a-z]{1,6}/?([a-z\d\?=&\._-]*))#is";
$ptrn[] = '{
(?:
(\w+://) # протокол с двумя слэшами
| # - или -
www\. # просто начинается на www
)
[\w-]+(\.[\w-]+)* # имя хоста
(?: : \d+)? # порт (не обязателен)
[^<>"\'()\[\]\s]* # URI (но БЕЗ кавычек и скобок)
(?: # последний символ должен быть...
(?<! [[:punct:]] ) # НЕ пунктуацией
| (?<= [-/&+*] ) # но допустимо окончание на -/&+*
)
}xis';
$ptrn[] = '№\b(?:(https?|ftp|udp)://)?(?:([a-z1-9][a-z0-9\-]{1,14}\.){1,7}?\b(com|edu|biz|gov|int|info|mil|net|org|moby|[a-z]{2})|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b(:\d{2,4})?(?:/[A-Za-z0-9/\?\.\-_%&=]*)?№'; // и такое, навороченное и наверное долгоищущее )
$txt = 'Ссылка: 1(http://domain.com,) 2 http://test.test.test.test.test.ru, 3 www.test.test.test.test.test.ru, www.ru?"a"=b, 4 http://site.net. 5 http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=53188
текст 6 www.yandex.ru/r.php?gh=6 текст2 7 http://rambler.ru текст3 8 http://www.yahoo.ru текст4
Как перевести адрес типа 9 sub.domen.ru или 10 http://sub.domen.ru в ссылку?
и немного того.что ещё бывает:
11 http://77.222.42.122/forum/
12 https://www.icq.com/register/
13 ftp://ftp.ru:21/
14 ftp://anonymous:anonim%40mail.ru@ftp.ru/pub/
и немного того что бывает но не ссылки
[.htaccess]
Options +ExecCGI
DirectoryIndex index.pl
[/.htaccess]
http://что.то такое
puppy-4.00-k2.6.21.7-seamonkey.iso
j2sdk-1_4_2_17-windows-i586-p.exe
vjredist.exe
';
for ($i=0; $i<count($ptrn); $i++)
{
preg_match_all($ptrn[$i], $txt, $out);
print_r($out[0]);
print "\n\n";
}
?></pre>
|
в случае с таким текстом победило второе, но http://что.то тоже пропустило ;) | |
|
|
|
|
|
|
|
для: sil
(08.05.2008 в 20:46)
| | >> похоже сложнее найти адрес чем заменить.
Это точно...
>>но http://что.то тоже пропустило
Тут я не совсем, все понял. Имеете ввиду какой, еще скрипт пропускает? | |
|
|
|
|
|
|
|
для: Незнайка
(09.05.2008 в 13:48)
| | это я о том что символьный класс \w
пропускает как латинские буквы с _ \d так и всевозможные немецкие с умляутами , русские и ещё какие.то похожие на испанские :)
которых немножко есть в таблице кодировки cp1251 и много в utf-8 .
Хотя возможно скоро и будут урл'ы на всех языках.
Что-то более точное есть в POSIX символьных классах , типа [[:alpha:]]+ [:alnum:] но по возможности лучше обходить слишком придирчивое и ресурсоёмкое | |
|
|
|
|
|
|
|
для: sil
(09.05.2008 в 14:40)
| | Понятно.
>> по возможности лучше обходить слишком придирчивое и ресурсоёмкое
Спасибо, буду иметь ввиду : ) | |
|
|
|