Перейти к контенту

Читабельные везде ссылки


Рекомендуемые сообщения

Хм, поработал с системой и заметил что она глючит. Значит все ссылки с моего сайта даже в полном варианте написания отображаються нормально.

А вот ссылки на эту тему к примеру выглядят так "index.php"

А ссылка к примеру на http://my.ukrtelecom.ua/ так и отображается. Не порядок :D

Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 90
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

  • 3 недели спустя...

могут быть глюки с настройками сервера, не со скриптом

проверь, разрешены ли исходящие запросы

могут быть закрыты какие-то порты

Ссылка на комментарий
Поделиться на других сайтах

Arhar

Мне кажется 30% не используют favicon. Если не меньше.

Смотрелось бы эстетичней и интересней, а забрать его не сложнее чем тайтл.

Но дело ваше, мое - предложить :D

Ссылка на комментарий
Поделиться на других сайтах

  • 3 недели спустя...

Работает :D

 

Спасибо большое, Arhar. Всё просто и удобно...

 

2.2.1.

 

А идея с favicon хороша.

"Если есть - отображать, если нет - не отображать"

Ссылка на комментарий
Поделиться на других сайтах

Такой модуль (добавление favicon к ссылкам) реализован для CMS Drupal.

http://drupal.org/project/urlicon

 

Быть может это поможет.. :D

Изменено пользователем Digy
Ссылка на комментарий
Поделиться на других сайтах

не очень

там как я понял урликон грузится в свою папку на своем сервере

да и используется какая-то встроенная в дрюпал функция, не оглашенная в самом моде

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

сначала бы тут написал, а потом уже в панику

  1. там стоит обрезание по длине до 60 символов (а что если титл будет длиной 5000 символов?) | безопасность++
     
  2. никакие ббкоды КРОМЕ в полученном титле не обрабатываются (а стало быть и в твоем)

решение

[b][url=http://ya.ru]text[/url][/b]

Ссылка на комментарий
Поделиться на других сайтах

А ссылка к примеру на http://my.ukrtelecom.ua/ так и отображается. Не порядок :D

 

а у меня на Укртелеком нормально отображается. вот как:

Мій Укртелеком :: Система управління послугами

 

 

зато к примеру ссылка _http://www.prezentation.ru/articles/opportunities_web_video_25_01_07_print.html

отображается как 404 Not Found

 

и даже при попытке вручную прописать правильное название "Как заработать на публикации видео" оно мне после отправки показывает Как зараб

 

не понятно...

Ссылка на комментарий
Поделиться на других сайтах

там стоит обрезание по длине до 60 символов (а что если титл будет длиной 5000 символов?) | безопасность++

Практика показала что 60 мало. Иногда хочеться целое предложение сделать ссылкой. Тут даже 150 мало.

никакие ббкоды КРОМЕ в полученном титле не обрабатываются (а стало быть и в твоем)

Ну почему в чистом 2.2.2 обрабатываються все ббкоды и прекрасно работают? Ведь титл не всегда полученый. Я имею ввиду титлы, которые я сам пишу.

Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...

Если кому интересно, вот адаптированый под 1.3х и доработаный

//-----------------------------------------
	// Make sure it's a "proper" url
	//-----------------------------------------

	if ( ! preg_match( "/^(http|ftp|https|news):\/\//i", $url['show'] )) $skip_it = 1;

		$show = $url['show'];

		if ( stristr($show, $ibforums->base_url) )
		{
			$match = array();

			if ( preg_match("/showtopic=(\d+)/", $show, $match) or preg_match("/&t=(\d+)/", $show, $match) ) 
		{
			$tid = intval($match[1]);

			if ( $tid )
				{
				   $res = $DB->query("SELECT title FROM ibf_topics WHERE tid='".$tid."'");

					if ( $record = $DB->fetch_row($res) )
					{
						if ( preg_match("~p=(\d+)~", $show, $match) or preg_match("~#entry(\d+)~", $show, $match) )
						{
							$record['title'] .= " (сообщение #".$match[1].")";
						}
						$show = $record['title'];
					}
				}
		}

				elseif ( preg_match("/showforum=(\d+)/", $show, $match) ) 
			{
				$fid = intval($match[1]);

					$res = $DB->query("SELECT name FROM ibf_forums WHERE id='".$fid."'");

					if ( $record = $DB->fetch_row($res) )
					{
						$show = $record['name'];
					}
			}

				elseif ( preg_match("/showuser=(\d+)/", $show, $match) ) 
			{
				$mid = intval($match[1]);

				if ( $mid )
				{
					$res = $DB->query("SELECT name FROM ibf_members WHERE id='".$mid."'");

					if ( $record = $DB->fetch_row($res) )
					{
						$show = $record['name'];
					}
				}
			}

		else
		{
			if (( preg_match( "/^<img src/i", $show ) ) or ( preg_match( "/^<img style/i", $show ) ) or ( preg_match( "/^<img width/i", $show ) ) )
			{
				$show = stripslashes($show);
			}
			elseif (preg_match("#^(http|news|https|ftp|aim)://#", $show))
			{
				$show = $this->get_url_title($show);
			}
			else $show = $url['show'];

			if ((strlen($show)>60)and(! preg_match( "/^<img src/i", $show ) )and(! preg_match( "/^<img style/i", $show ) )and(! preg_match( "/^<img width/i", $show ) )  )
			{
				$show = substr($show,0,59);
			}
		}

		   if (!$show)//if it is a file, it hasn't got title
		{
			$title = @parse_url($url['html']);
			$show = substr(strrchr($title['path'],"/"),1);//filename
			if (!$show)// and if there is no anything at this url
			{
				$show = $url['html'];
			}
		}
	   } 
	elseif ($skip_it != 1)
	{
		$stripped = preg_replace( "#^(http|ftp|https|news)://(\S+)$#i", "\\2", $url['show'] );
		$uri_type = preg_replace( "#^(http|ftp|https|news)://(\S+)$#i", "\\1", $url['show'] );

		$show = $uri_type.'://'.substr( $stripped , 0, 35 ).'...'.substr( $stripped , -15   );
	}

	//get_url_title
	else
	{
		if (( preg_match( "/^<img src/i", $show ) )or ( preg_match( "/^<img style/i", $show ) ) or ( preg_match( "/^<img width/i", $show ) ) )
		{
			$show = stripslashes($show);
		}
		elseif (preg_match("#^(http|news|https|ftp|aim)://#", $show))
		{
			$show = $this->get_url_title($show);
		}
		else $show = $url['show'];

		if ((strlen($show)>60)and(! preg_match( "/^<img src/i", $show ) )and(! preg_match( "/^<img style/i", $show ) )and(! preg_match( "/^<img width/i", $show ) )  )
		{
			$show = substr($show,0,59);
		}
	}
	if (!$show)//if it is a file, it hasn't got title
	{
		$title = @parse_url($url['html']);
		$show = substr(strrchr($title['path'],"/"),1);//filename
		if (!$show)// and if there is no anything at this url
		{
			$show = $url['html'];
		}
	}
	return $url['st'] . "<a href=\"".$url['html']."\" target=\"_blank\">".$show."</a>" . $url['end'];
}

function get_url_title($url)
{
	  $url = parse_url($url);

	if(!in_array($url['scheme'],array('','http')))
		return;

	$fp = @fsockopen ($url['host'], ($url['port'] > 0 ? $url['port'] : 80), $errno, $errstr, 2);
	if (!$fp)
	   {
		   return;
		//echo "$errstr ($errno)<br>\n";
	   }
	   else
	   {
			   fputs ($fp, "GET /".$url['path'].($url['query'] ? '?'.$url['query'] : '')." HTTP/1.0\r\nHost: ".$url['host']."\r\n\r\n");
			   $d = '';
		while (!feof($fp))
			   {
				   $d .= fgets ($fp,2048);

				if(preg_match('~(</head>|<body>|(<title>\s*(.*?)\s*</title>))~i', $d, $m))
						   break;
			   }
			   fclose ($fp);

			$m[3] = str_replace("("," ",$m[3]);
			$m[3] = str_replace(")"," ",$m[3]);
			$m[3] = addslashes($m[3]);
		   return $m[3];
	}
}

Доработка заключается в том что форумные ссылки типа (http://www.ibresource.ru/forums/index.php?s=&showtopic=11104&view=findpost&p=81339) будут отображаться как

http://www.ibresource.ru/forums/index.php?...ost&p=81339

 

PS Как то странно у вас тэг URL обрабатывается...

Ссылка на комментарий
Поделиться на других сайтах

потому что перепутал

надо

[url=http://www.ibresource.ru/forums/index.php?s=&showtopic=11104&view=findpost&p=81339]Читабельные везде ссылки (сообщение #81339)[/url]

Ссылка на комментарий
Поделиться на других сайтах

Если кому интересно, вот адаптированый под 1.3х и доработаный

Малость недоработанный:

  1. При вводе вполне "законного" в 1.х адреса
    http://сайт.ру/index.php?showtopic=702&view=getlastpost

    получаем

    [url=http://сайт.ру/index.php?showtopic=702&view=getlastpost]index.php[/url]


  2. При вводе ссылки вида
    http://сайт.ру/index.php?showtopic=702

    получаем ссылку вида

    [url=http://сайт.ру/index.php?showtopic=702]Имя_борды -> название топика[/url]

    А нафига нам имя борды?

Ссылка на комментарий
Поделиться на других сайтах

потому что перепутал

Косяк :D

При вводе вполне "законного" в 1.х адреса

Это легко исправить, добавив после

if ( preg_match("~p=(\d+)~", $show, $match) or preg_match("~#entry(\d+)~", $show, $match) )
						{
							$record['title'] .= " (сообщение #".$match[1].")";
						}

условие

if ( preg_match("~getnewpost~", $show, $match) or preg_match("~getlastpost~", $show, $match) )
						{
							$record['title'] .= " (Последнее сообщение)";
						}

Имя_борды -> название топика

Это у тебя от старой модификации осталось, сотри полность старую, ту что на первой странице и поставь мою. У меня такая же фигня была.

Ссылка на комментарий
Поделиться на других сайтах

Это у тебя от старой модификации осталось, сотри полность старую, ту что на первой странице и поставь мою. У меня такая же фигня была.

Я не ставил старую.

Я разобрался откуда засада.

У меня этот мод вообще не отрабатывает, работает только функция get_url_title($url) - она ломится в интернет, и считывает тайтлы страниц... Я для пробы удалили все запросы и проверки в твоем коде до начала функции get_url_title($url), и ничего не изменилось.

И имя борды, естественно совершенно, взяло из тайтла.

А линк на профиль пользователя он преобразует в "Профиль пользователя"; я специально проверил, этот набор слов есть только в двух ленг-файлах, и твой код никак к ним не обращается...

Ссылка на комментарий
Поделиться на других сайтах

Не знаю с чем это связано, но у тебя не выполняется условие

if ( stristr($show, $ibforums->base_url) )
		{

поэтому сразу переходит к

else
		{
			if (( preg_match( "/^<img src/i", $show ) ) or ( preg_match( "/^<img style/i", $show ) ) or ( preg_match( "/^<img width/i", $show ) ) )
			{
				$show = stripslashes($show);
			}
			elseif (preg_match("#^(http|news|https|ftp|aim)://#", $show))
			{
				$show = $this->get_url_title($show);
			}

Вот тебе вся функция целеком уже с исправленым getlastpost с работающего форума

	/**************************************************/
// regex_build_url: Checks, and builds the a href
// html
/**************************************************/

function regex_build_url($url=array()) {
	global $ibforums, $DB;
	$skip_it = 0;

	// Make sure the last character isn't punctuation.. if it is, remove it and add it to the
	// end array

	if ( preg_match( "/([\.,\?]|!)$/", $url['html'], $match) )
	{
		$url['end'] .= $match[1];
		$url['html'] = preg_replace( "/([\.,\?]|!)$/", "", $url['html'] );
		$url['show'] = preg_replace( "/([\.,\?]|!)$/", "", $url['show'] );
	}

	// Make sure it's not being used in a closing code/quote/html or sql block

	if (preg_match( "/\[\/(html|quote|code|sql)/i", $url['html']) )
	{
		return $url['html'];
	}

	// clean up the ampersands
	$url['html'] = str_replace( "&" , "&" , $url['html'] );

	// Make sure we don't have a JS link
	$url['html'] = preg_replace( "/java script:/i", "java script: ", $url['html'] );

	// Do we have http:// at the front?

	if ( ! preg_match("#^(http|news|https|ftp|aim)://#", $url['html'] ) )
	{
		$url['html'] = 'http://'.$url['html'];
	}

	//-------------------------
	// Tidy up the viewable URL
	//-------------------------

	if (preg_match( "/^<img src/i", $url['show'] )) $skip_it = 1;

	$url['show'] = str_replace( "&" , "&" , $url['show'] );
	$url['show'] = preg_replace( "/java script:/i", "java script: ", $url['show'] );

	if ( (strlen($url['show']) -58 ) < 3 )  $skip_it = 1;

	//-----------------------------------------
	// Make sure it's a "proper" url
	//-----------------------------------------

	if ( ! preg_match( "/^(http|ftp|https|news):\/\//i", $url['show'] )) $skip_it = 1;

		$show = $url['show'];

		if ( stristr($show, $ibforums->base_url) )
		{
			$match = array();

			if ( preg_match("/showtopic=(\d+)/", $show, $match) or preg_match("/&t=(\d+)/", $show, $match) ) 
		{
			$tid = intval($match[1]);

			if ( $tid )
				{
				   $res = $DB->query("SELECT title FROM ibf_topics WHERE tid='".$tid."'");

					if ( $record = $DB->fetch_row($res) )
					{
						if ( preg_match("~p=(\d+)~", $show, $match) or preg_match("~#entry(\d+)~", $show, $match) )
						{
							$record['title'] .= " (сообщение #".$match[1].")";
						}
						$show = $record['title'];
					}
				}
		}

				elseif ( preg_match("/showforum=(\d+)/", $show, $match) ) 
			{
				$fid = intval($match[1]);

					$res = $DB->query("SELECT name FROM ibf_forums WHERE id='".$fid."'");

					if ( $record = $DB->fetch_row($res) )
					{
						$show = $record['name'];
					}
			}

				elseif ( preg_match("/showuser=(\d+)/", $show, $match) ) 
			{
				$mid = intval($match[1]);

				if ( $mid )
				{
					$res = $DB->query("SELECT name FROM ibf_members WHERE id='".$mid."'");

					if ( $record = $DB->fetch_row($res) )
					{
						$show = $record['name'];
					}
				}
			}

		else
		{
			if (( preg_match( "/^<img src/i", $show ) ) or ( preg_match( "/^<img style/i", $show ) ) or ( preg_match( "/^<img width/i", $show ) ) )
			{
				$show = stripslashes($show);
			}
			elseif (preg_match("#^(http|news|https|ftp|aim)://#", $show))
			{
				$show = $this->get_url_title($show);
			}
			else $show = $url['show'];

			if ((strlen($show)>60)and(! preg_match( "/^<img src/i", $show ) )and(! preg_match( "/^<img style/i", $show ) )and(! preg_match( "/^<img width/i", $show ) )  )
			{
				$show = substr($show,0,59);
			}
		}

		   if (!$show)//if it is a file, it hasn't got title
		{
			$title = @parse_url($url['html']);
			$show = substr(strrchr($title['path'],"/"),1);//filename
			if (!$show)// and if there is no anything at this url
			{
				$show = $url['html'];
			}
		}
	   } 
	elseif ($skip_it != 1)
	{
		$stripped = preg_replace( "#^(http|ftp|https|news)://(\S+)$#i", "\\2", $url['show'] );
		$uri_type = preg_replace( "#^(http|ftp|https|news)://(\S+)$#i", "\\1", $url['show'] );

		$show = $uri_type.'://'.substr( $stripped , 0, 35 ).'...'.substr( $stripped , -15   );
	}

	//get_url_title
	else
	{
		if (( preg_match( "/^<img src/i", $show ) )or ( preg_match( "/^<img style/i", $show ) ) or ( preg_match( "/^<img width/i", $show ) ) )
		{
			$show = stripslashes($show);
		}
		elseif (preg_match("#^(http|news|https|ftp|aim)://#", $show))
		{
			$show = $this->get_url_title($show);
		}
		else $show = $url['show'];

		if ((strlen($show)>60)and(! preg_match( "/^<img src/i", $show ) )and(! preg_match( "/^<img style/i", $show ) )and(! preg_match( "/^<img width/i", $show ) )  )
		{
			$show = substr($show,0,59);
		}
	}
	if (!$show)//if it is a file, it hasn't got title
	{
		$title = @parse_url($url['html']);
		$show = substr(strrchr($title['path'],"/"),1);//filename
		if (!$show)// and if there is no anything at this url
		{
			$show = $url['html'];
		}
	}
	return $url['st'] . "<a href=\"".$url['html']."\" target=\"_blank\">".$show."</a>" . $url['end'];
}

Если не поможет, попробуй поэксперементить с этим куском

if ( stristr($show, $ibforums->base_url) )

Ссылка на комментарий
Поделиться на других сайтах

  • 4 месяца спустя...

линк http://ya.ru - норм

ya.ru - не парсит

http://microsoft.com - не парсит.

 

 

а така Arhar мужик великий! :D

Изменено пользователем olmer2002
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.