Поддержка «автоматических ссылок» 
		
		
		
		Суть проблемы: Имеется скрипт блога. Все работает замечательно. Но... не хватает поддержки автоматических гиперссылок.  
	Как в php сделать чтобы строки вида «http://адрес», «www.адрес» и «ящик@домен» автоматически конвертировались в соответствующие гиперссылки?  | 
	
		
 руками блин! Как же еще?! 
	preg_replace() десу!!!  | 
	
		
 спасибо за исчерпывающий ответ :) 
	 | 
	
		
 типа вот такого? 
	
<?php 
  $pattern = "/(http:\/\/([\w\d_\-]+)\.([\w\d_\-]+)\.(ru|net|com|org|biz|info))/i"; 
  $to = "<a href=\"$1\">$1</a>"; 
  $text = "А это тот самый сайт [http://www.my_site-domain23.com], о котором мы разговаривали вчера."; 
   
  echo HtmlSpecialChars($text)."<br>"; 
  $text = preg_replace($pattern,$to,$text); 
  echo HtmlSpecialChars($text); 
    // [<a href="http://www.my_site-domain23.com">http://www.my_site-domain23.com</a>] 
?>
 | 
	
		
 ну, если работает, то да)) 
	теперь немного критики: из шаблона можно убрать внешние круглые скобки и в строке замены обращатся уже к $0 вместо $1 также стоит учесть что что адрес сайта может быть без поддомена( например http://ya.ru), либо с произвольным их количеством, и в любой зоне для неисспользуемых подшаблонов можно задать ?: указав тем самым, что запоминать их не надо. да и подшаблоны у вас используются там, где и без них можно 
$pattern = "/http:\/\/(?:[\w\d_\-]+\.)+[\w\d_]{2,5}/i"; 
$to = "<a href=\"$0\">$0</a>"; 
$text = "А это тот самый сайт [http://my_site-domain23.edu], о котором мы разговаривали вчера.";
вообще же довольно замечательно для первого регулярного выражения, если вы сами его составили  | 
	
		
 конечно не сама. Гугл помог :)  теперь осталось додуматься как это совместить с основным кодом, то есть куда вставить 
	
<?php
if($username) {
$action = $_GET['action'];
if($action == "go") {
function utf8_substr($str, $from, $len) {
	return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s', '$1', $str);
}
	$title = $_POST['title'];
	$descr = $_POST['descr'];
	$theme = $_POST['theme'];
	$trans = $_POST['trans'];
	
	if(!$title) {
		$ERROR = "Введите заголовок";
	} elseif(!$descr) {
		$ERROR = "Введите текст сообщения";
	} elseif(!$username) {
		$ERROR = "Вы не авторизированы!";
	} elseif(!$theme) {
		$ERROR = "Выберите тему";
	} elseif(strlen($title) > 50) {
		$ERROR = "В заголовке должно быть не более 25-ти символов";
	} elseif(strlen($descr) > 6000) {
		$ERROR = "Текст сообщения содержит слишком много символов (не более 3000)";
	} else {
	        if($trans == 1) {
	        include "functions.php";
	        	$title = translit($title);
				$descr = translit($descr);
	        }
         	$title = htmlspecialchars(stripslashes($title));
			$title = str_replace("'","",$title);
			$descr = htmlspecialchars(stripslashes($descr));
			$descr = str_replace("'","",$descr);
				$date = date("d.m.Y H:i:s");
				$stxt = utf8_substr($descr,0,50);
				$time = time();
    $sql = mysql_query("INSERT INTO users_blogs (user, title, date, theme, text, time) VALUES ('$username', '$title', '$date', '$theme', '$stxt', $time)");
    $id = mysql_insert_id();
    $sql = mysql_query("INSERT INTO message (blog_id, msg, user, date) VALUES ('$id', '$descr', '$username', '$date')");
    $YES = "Ваш блог создан!";
    include "posts.php";
	}
}
	if(!$YES) { include "design/".$dir."/add_blog.tpl"; }
} else {
	print "Время сессии истекло!";
}
?>
 | 
	
		
 а разве непонятно? 
	это простой, хоть и говнарский код вставляйте в любом месте ранее добавления в SQL-запрос учитывая что используются не-UTF символы, то без разницы PS забыл, что в зависимости от настроек локали \w в регулярке может затрагивать не только латиницу но и национальный алфавит 
$pattern = "/http:\/\/(?:[a-zA-Z\d_\-]+\.)+[a-zA-Z\d_]{2,5}/i";
 | 
	
		
 что-то не получается... наверное из-за того что "говнарский код":D 
	 | 
	
		
 и тем не менее, попробуйте сделать это самостоятельно 
	если вы не можете сами сделать такое небольшое изменение кода, то это не означает что за вас будут не только разжевывать(что я уже сделал), но и проглатывать-переваривать  | 
	
		
 ну да, согласна. буду пробовать методом науного втыка - самым точным методом в мире:) 
	 | 
| Часовой пояс GMT +3, время: 10:52. |