Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.12.2009, 09:20
Аватар для irka07
Интересующийся
Отправить личное сообщение для irka07 Посмотреть профиль Найти все сообщения от irka07
 
Регистрация: 28.05.2009
Сообщений: 21

Поддержка «автоматических ссылок»
Суть проблемы: Имеется скрипт блога. Все работает замечательно. Но... не хватает поддержки автоматических гиперссылок.

Как в php сделать чтобы строки вида «http://адрес», «www.адрес» и «ящик@домен» автоматически конвертировались в соответствующие гиперссылки?
Ответить с цитированием
  #2 (permalink)  
Старый 14.12.2009, 09:37
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,233

руками блин! Как же еще?!
preg_replace() десу!!!
Ответить с цитированием
  #3 (permalink)  
Старый 14.12.2009, 09:42
Аватар для irka07
Интересующийся
Отправить личное сообщение для irka07 Посмотреть профиль Найти все сообщения от irka07
 
Регистрация: 28.05.2009
Сообщений: 21

спасибо за исчерпывающий ответ
Ответить с цитированием
  #4 (permalink)  
Старый 14.12.2009, 09:58
Аватар для irka07
Интересующийся
Отправить личное сообщение для irka07 Посмотреть профиль Найти все сообщения от irka07
 
Регистрация: 28.05.2009
Сообщений: 21

типа вот такого?

<?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>] 

?>
Ответить с цитированием
  #5 (permalink)  
Старый 14.12.2009, 10:21
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,233

ну, если работает, то да))

теперь немного критики:
из шаблона можно убрать внешние круглые скобки и в строке замены обращатся уже к $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], о котором мы разговаривали вчера.";

вообще же довольно замечательно для первого регулярного выражения, если вы сами его составили
Ответить с цитированием
  #6 (permalink)  
Старый 14.12.2009, 10:48
Аватар для irka07
Интересующийся
Отправить личное сообщение для irka07 Посмотреть профиль Найти все сообщения от irka07
 
Регистрация: 28.05.2009
Сообщений: 21

конечно не сама. Гугл помог теперь осталось додуматься как это совместить с основным кодом, то есть куда вставить
<?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 "Время сессии истекло!";
}
?>
Ответить с цитированием
  #7 (permalink)  
Старый 14.12.2009, 10:57
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,233

а разве непонятно?
это простой, хоть и говнарский код
вставляйте в любом месте ранее добавления в SQL-запрос
учитывая что используются не-UTF символы, то без разницы
PS забыл, что в зависимости от настроек локали \w в регулярке может затрагивать не только латиницу но и национальный алфавит
$pattern = "/http:\/\/(?:[a-zA-Z\d_\-]+\.)+[a-zA-Z\d_]{2,5}/i";
Ответить с цитированием
  #8 (permalink)  
Старый 14.12.2009, 11:09
Аватар для irka07
Интересующийся
Отправить личное сообщение для irka07 Посмотреть профиль Найти все сообщения от irka07
 
Регистрация: 28.05.2009
Сообщений: 21

что-то не получается... наверное из-за того что "говнарский код"
Ответить с цитированием
  #9 (permalink)  
Старый 14.12.2009, 11:14
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,233

и тем не менее, попробуйте сделать это самостоятельно
если вы не можете сами сделать такое небольшое изменение кода, то это не означает что за вас будут не только разжевывать(что я уже сделал), но и проглатывать-переваривать
Ответить с цитированием
  #10 (permalink)  
Старый 14.12.2009, 11:17
Аватар для irka07
Интересующийся
Отправить личное сообщение для irka07 Посмотреть профиль Найти все сообщения от irka07
 
Регистрация: 28.05.2009
Сообщений: 21

ну да, согласна. буду пробовать методом науного втыка - самым точным методом в мире
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск