|
|
|
| Здравствуйте. Как мне переделать это выражение:
$str = ereg_replace("http://(([A-Za-z0-9.=%&;#-_]+(\/)?(\?)?)*)", "<a href=\"\\0\">\\0</a>", $str);
|
Таким образом, чтобы, к примеру, в строке "http://site.ru." последняя точка не считалась частью ссылки. | |
|
|
|
|
|
|
|
для: Z3RO
(05.02.2012 в 13:57)
| | пойдет? :)
<?
$str = "http://site.ru...";
echo preg_replace("/^(http:\/\/[a-z0-9\.\-]+(ru|org|com)).*$/i", "<a href='\\1'>\\1</a>", $str);
?>
|
| |
|
|
|
|
|
|
|
для: ladan
(05.02.2012 в 16:08)
| | Нет, нужно чтобы все доменные зоны проходили и данное выражение адреса с поддоменами не будет видеть. | |
|
|
|
|
|
|
|
для: Z3RO
(05.02.2012 в 20:15)
| |
preg_replace("/(http:\/\/[a-z0-9\.\-]+\.[a-z]{2,3}).*/i", "<a href='\\1'>\\1</a>", "http://blog.mokoron.com");
|
| |
|
|
|
|
|
|
|
для: Z3RO
(05.02.2012 в 13:57)
| | Для начала скажите, какого вида ссылки могут быть?
Только "http://site.ru.", или и "http://site.ru/." и "http://site.ru./" и "http://site.ru/index.php." и так далее. И из какого места убирать точку, из домена, из пути, из файла, из любого места, где ее не должно быть или просто из конца любой ссылки?
Просто по вашему выражению не понятно, что переделывать. Оно пропустит любую белиберду начиная от просто http:// и заканчивая http://......'-\|/-'.....%%=#=. | |
|
|
|
|
|
|
|
для: Sfinks
(05.02.2012 в 23:45)
| | Не совсем любую. Вобщем нужно выражение, которое будет правильно превращать ЮРЛ в тексте на ссылки. | |
|
|
|
|
|
|
|
для: Z3RO
(06.02.2012 в 00:35)
| | Общий вид такой:
<?
$pattern = "#http://([а-яёa-z\d][а-яёa-z\d\-]*\.)+[а-яёa-z]{2,6}(/([а-яё\w\-\.]*[а-яё\w\-/]{1})*(\?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?(&(amp;)?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?)*)?)?#ui";
$url = preg_replace($pattern,"<a href=\"$0\">",$url);
| Это в предположении что у вас используется UTF-8. Если нет, нужно в конце перед i убрать модификатор u.
Дальше пример, какие урлы понимает это выражение:
<?
header("content-type: text/plain; charset=utf-8");
$urls = array( "http://site.ru.",
"http://site.ru.com",
"http://site.ru.com/",
"http://сайт.ru.com/dir/",
"http://site.ru.com/dir/file.php",
"http://site.рф.com/dir/lbh/file.php?a",
"http://site.ru.com/dir/file.php?a=r5%2F",
"http://site.ru.ком/dir/file.php?a=r5%2F&",
"http://site.ru.com/dir/file.php?a=r5%2F&b=12",
"http://site.ru.com/дир/file.php?a=r5%2F&b=12&c=" );
$max_len = mb_strlen($urls[9],"utf-8");
$pattern = "#http://([а-яёa-z\d][а-яёa-z\d\-]*\.)+[а-яёa-z]{2,6}(/([а-яё\w\-\.]*[а-яё\w\-/]{1})*(\?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?(&(amp;)?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?)*)?)?#ui";
foreach($urls as $url)
echo $url.str_repeat(" ",$max_len-mb_strlen($url,"utf-8")).
" => ".preg_replace($pattern,"<a href=\"$0\">",$url)."\n";
| результат:
http://site.ru. => <a href="http://site.ru">.
http://site.ru.com => <a href="http://site.ru.com">
http://site.ru.com/ => <a href="http://site.ru.com/">
http://сайт.ru.com/dir/ => <a href="http://сайт.ru.com/dir/">
http://site.ru.com/dir/file.php => <a href="http://site.ru.com/dir/file.php">
http://site.рф.com/dir/lbh/file.php?a => <a href="http://site.рф.com/dir/lbh/file.php?a">
http://site.ru.com/dir/file.php?a=r5%2F => <a href="http://site.ru.com/dir/file.php?a=r5%2F">
http://site.ru.ком/dir/file.php?a=r5%2F& => <a href="http://site.ru.ком/dir/file.php?a=r5%2F&">
http://site.ru.com/dir/file.php?a=r5%2F&b=12 => <a href="http://site.ru.com/dir/file.php?a=r5%2F&b=12">
http://site.ru.com/дир/file.php?a=r5%2F&b=12&c= => <a href="http://site.ru.com/дир/file.php?a=r5%2F&b=12&c=">
|
| |
|
|
|
|
|
|
|
для: Sfinks
(06.02.2012 в 04:04)
| | Спасибо. То, что нужно. =) | |
|
|
|