|
|
|
| Нужно найти в тексте фрагменты, типа www.site.ru и преобразовать их в гиперссылки (<a href ="http://site.ru">www.site.ru</a>). Кто уже сталкивался, пожалуйста, помогите. | |
|
|
|
|
|
|
|
для: Владимир22
(23.09.2008 в 14:17)
| |
<?
$txt = 'список, неполный :
доп. комманда инициализации соединения
AT+CGDCONT=1,"IP","internet.beeline.ru"
индексный файл Perl index.pl
конструкция javascript: obj.id = "id"
Запрос SQL SELECT base.table.id, base.table2.pr FROM ...
e-mail xxxxxxx@xxxxxxxx.xx
реальный адрес
ftp://anonymous:xxxxx%40mail.ru@ftp.ru:21/pub/
с http:// бывают похожие c именами и пасврдами
и портами и с русскими буквами , и с запятыми, всевозможными скобками в путях и прочими символами
http://ru.wikipedia.org:80/wiki/Продукт
нереальный адрес типа реального 127.0.0.1:8080/sklad/
';
?>
|
Вам какие хочется адреса выделить , с гет параметрами или только домены, с http:// или без него и начинающиеся с начала слова , или обязательно ограниченные пробельными символами ,
и допускаются-ли символы национальных алфавитов, т.к. браузеры их сами урл.кодируют?
И устроит-ли то в ссылки будут преобразовываться не только адреса ? | |
|
|
|
|
|
|
|
для: xx77
(24.09.2008 в 00:19)
| | Это нужно НЕ для парсера страниц - всё гораздо проще:
Пользователь в форме пишет объявление с текстом и если в нём есть ссылка, типа www.site.ru , то нужно автоматически сделать её гиперссылкой.
Т.е. логика такова:
найти www.
и потом начиная с найденного и до первого пробела, захватить это и сделать гиперссылку. Как? | |
|
|
|
|
|
|
|
для: Владимир22
(24.09.2008 в 12:38)
| | Вы уверены, что для всех ссылок из посланья пользователя ключевым словом будет www. Заблуждаетесь. Внимательно прочтите предыдущий вопрос, Вам адресованный. | |
|
|
|
|
|
|
|
для: Владимир22
(24.09.2008 в 12:38)
| | логика не выдерживает критики , как говорится)
при такой логике любой из пользователей сможет отправлять всех
ваших посетителей по одному только движению их мышей бороздить безкрайние просторы интернета ))
,пусть даже нужно опираться только на обязательное www в начале ссылки
попробуйте например такие несколько шаблонов
<style type="text/css">
a { font: Bold 120% Arial; }
</style>
<pre><?
$txt = '
www.mail.ru
http://www.mail.ru
или просто сказать
www.Адреса или www.......
wwwww.wwwwwwwwwwww
dom.www.site.xx
--------------------------
mail.ru
www4.mail.ru
www.mail.ru/"onclick="alert(\'badWord\');return(false);
www.ГЫ-ГЫ
';
$pattern = array(
'#\b(www\.\S+)#',
'#(?<=^|\s)(www\.\S+)#',
'#\b(?:http://)?(www\.\S+)#',
'#\b(?:http://)?(www\.[^"\s]+)#',
'~
(?:https?://)?(www\.
(?:[0-9a-z][0-9a-z\-]{1,24}\.){1,6}
(?:biz|com|edu|gov|int|info|mil|moby|net|org
|[a-z]{2})(?:/[\.,;/\?\[\]%=&0-9a-zа-ЯёЁ]*)?)
# здесь много ещё не перечислил, никаких @:портов ....
~ix',
'#(www\.\S+)#'
);
foreach($pattern AS $one) {
echo preg_replace($one, '<a href="http://\1">\1</a>', $txt )
. '<hr/>';
}
?>
|
опираться на отсутствие пробелов в адресе , сами видите что получается
,тем более это всё вводится пользователями
правильно использовать то что было перед www , http:// или https://
или ещё какой протокол конечно можно
, но как быть если адрес содержит www в середине и не содержит в начале
тот большой шаблон должен быть раза в три больше , что-бы учесть все существующие виды адресов ,
что создаст ещё и затраты времени .
и всё-равно несуществование несуществующих не факт если они пройдут все возможные проверки формата записи
Но попробуйте , может у Вас получится безошибочно определить являются-ли слова с точками адресами | |
|
|
|
|
|
|
|
для: xx77
(24.09.2008 в 15:06)
| | Спасибо, xx77!
Но мне нужно максимально просто - только проверить на www.. В инструкции при заполнении формы всем пользователям предписывается вставлять сайты именно так: www.site.ru. Поэтому нужно всё максимально упростить.
Вот сделал так(взял кусок из вашего кода):
$text=preg_replace('#(www\.\S+)#', '<a href="http://\1">\1</a>', $text);
|
Выводит вроде всё нормально, типа www.site.ru.
Но в конце ставит точку!!!!
<a href="http://www.site.ru.">http://www.site.ru.</a>
В итоге сайт не открывается.
Как от неё(точки) избавиться? | |
|
|
|
|
|
|
|
для: Владимир22
(24.09.2008 в 17:53)
| | Возможно так, как понятно из вашего поста.
$text=preg_replace('#(www\.\S+[^\.])#', '<a href="http://\1">\1</a>', $text);
|
| |
|
|
|
|
|
|
|
для: AcidTrash
(25.09.2008 в 21:42)
| | Спасибо, AcidTrash! Так вроде работает, но есть одна проблема:
Если после ссылки вплотную идёт любой символ (точка, запятая и пр. - например: www.site.ru,), то всё это захватывается и идёт в гиперссылку. Может в курсе, как сделать в этом коде принудительный пробел сразу после названия сайта, чтобы любые другие символы, идущие вплотную не захватывались в адрес. Заранее спасибо! | |
|
|
|
|
автор: AcidTrash(кафе) (30.09.2008 в 13:14) |
|
|
для: Владимир22
(25.09.2008 в 23:20)
| |
$text=preg_replace('#(www\.\S+\b)#s', '<a href="http://\1">\1</a>', $text);
|
| |
|
|
|
|
|
|
|
для: AcidTrash
(25.09.2008 в 21:42)
| | Ещё актуально. Нelp! | |
|
|
|
|
|
|
|
для: Владимир22
(25.09.2008 в 23:21)
| | Возможно вас заинтересует синтаксис Регулярных выражений
например здесь http://softtime.ru/group/id_group=3 ?
Это я не потому говорю что задача какая-то из ряда вон выходящая, а потому что Вы не только не смогли обьяснить что Вам нужно но и сами не знаете что Вам нужно.
Ну ск5азали что из формы вводят эти www............... ,
ну пусть даже это будет INPUT, и запросто можно ещё опираться на то что www............... это и есть вся строка ,
и можно применять ^ и $,
но теперь осазалось что Вам нужно не просто любые непробельные символы после www.
И какие именно адреса ,или их форматы, вам нужны, Вы тоже не знаете, вот, и что Вам можно ответить?
preg_replace('/^www\.\S+[^\.,!"$&#\(*,:=_0-9]$/' , '<u>\0</u>', trim($text));
|
?
[поправлено модератором] | |
|
|
|
|
|
|
|
для: EXP
(26.09.2008 в 01:20)
| | EXP, Ваш код не работает (просто ничего не происходит, никаких замен).
$text="Это текст в котором могут встречаться названия сайтов, например www.site.ru или после названий могут быть какие-либо знаки, типа точки и пр. - примеры: www.site.ru, www.site.ru; www.site.ru- www.site.ru! www.site.ru? www.site.ru* www.site.ru. Надо, чтобы все названия сайтов были преобразованы в гиперссылки.";
$text=preg_replace('/^www\.\S+[^\.,!"$&#\(*,:=_0-9]$/' , '<u>\0</u>', trim($text));
echo $text;
|
Ничего не работает! | |
|
|
|
|
|
|
|
для: Владимир22
(24.09.2008 в 17:53)
| | Если ориентироваться только на www и сделать простенько, то выражение будет таким
/www\.([aA-zZ0-9][aA-zZ0-9-]*\.)+[aA-zZ]{2,6}/ | |
|
|
|
|
|
|
|
для: Keda
(01.10.2008 в 17:08)
| | И что это за народное плавание?
Смотрим по теме от автор: Владимир22 (25.09.2008 в 23:20) . | |
|
|
|
|
|
|
|
для: AcidTrash
(01.10.2008 в 22:33)
| | А в чем собственно проблема? Точка в конце не захватывается. По теме верно.
Если есть какие-либо возражения, прошу высказаться по существу, а не абстрактными намеками. | |
|
|
|
|
|
|
|
для: Keda
(02.10.2008 в 10:29)
| | >А в чем собственно проблема? Точка в конце не захватывается. По теме верно.
У вас выражение вообще не правильно составлено. Не только точка или запятая в конце не захватывается, но еще и половина адреса.
Вот пример текста в котором надо заменить www.internet.beeline.ru. на ссылку.
С вашим РГ это будет выглядеть как-то так:
<?
$txt = 'список, неполный :
доп. комманда инициализации соединения
AT+CGDCONT=1,"IP","www.internet.beeline.ru."
индексный файл Perl index.pl
';
print preg_replace("/www\.([aA-zZ0-9][aA-zZ0-9-]*\.)+[aA-zZ]{2,6}/", '<a href="http://\\1">\\1</a>', $txt);
?>
|
Ну и как отлично все работает?
Думаю, что нет!
Тем более по тому как написал автор, следует, что ему проверять
на корректность не надо(лишь бы только было www), но это его проблемы.
Бог с ним сделаем с проверкой, тогда это выражение будет выглядеть как-то так:
preg_replace("/(www\.[aA-zZ0-9\.]+[aA-zZ]{2,6})/", '<a href="http://\\1">\\1</a>', $txt);
|
Но! Если адрес будет типа www.site.ru/?b=8, то в гиперссылку пол адреса не попадет
Так что вариант предложенный мной автор: AcidTrash(кафе)(30.09.2008 в 13:14), думаю более подходит. | |
|
|
|
|
|
|
|
для: AcidTrash
(02.10.2008 в 13:12)
| | Выражение составлено верно. Необходимо его правильно использовать. Строка замены должна быть
'<a href="http://\\0">\\0</a>'
На выходе будем иметь текст
список, неполный :
доп. комманда инициализации соединения
AT+CGDCONT=1,"IP","<a href="http://www.internet.beeline.ru">www.internet.beeline.ru</a>."
индексный файл Perl index.pl
Насчет полного адреса. Задача стояла распознавать только домен, с чем прекрасно справляется мое выражение. Мало того, оно соответствует RFC 1034, в котором сказано, что домен состоит только из букв латинского алфавита, цифр, точки и знака минус. Домен должен начинаться с буквы или цифры и не должен содержать две точки подряд. Единственное, что не учитывается - это максимальная длинна адреса. | |
|
|
|
|
автор: AcidTrash(кафе) (02.10.2008 в 15:38) |
|
|
для: Keda
(02.10.2008 в 14:47)
| | >'<a href="http://\\0">\\0</a>'
Да, это меня, что-то заклинило.
Ладно, насчет вида адреса, это известно только автору. | |
|
|
|