Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: URL: при преобразовании проверить есть ли http://
 
 автор: dimon3191   (25.06.2011 в 09:37)   письмо автору
 
 

есть рег. выражение которое преобразует ссылки типа http://сайт.ру в [url] тегах
 $entry = preg_replace("#\[url\][\s]*([\S]*)[\s]*\[\/url\]#si",'<a href="\\1" target=_blank>\\1</a>',$entry); 

но если ссылка без http:// то ссылка не получается
как добавить http:// к ссылке и не делать этого если http:// уже есть ?

  Ответить  
 
 автор: cheops   (25.06.2011 в 09:54)   письмо автору
 
   для: dimon3191   (25.06.2011 в 09:37)
 

В этом случае обычно используют функцию обратного вызова
<?php
  $pattern 
"#\[url\][\s]*([\S]*)[\s]*\[\/url\]#si";
  
$entry preg_replace_callback($pattern,
               
"url_replace",
                
$entry);
  function 
url_replace($matches)
  {
      if(
substr($matches[1], 07) != "http://"$matches[1] = "http://".$matches[1];
      return 
"<a href='$matches[1]' target='_blank'>$matches[1]</a>";
  }
?>

  Ответить  
 
 автор: dimon3191   (25.06.2011 в 10:33)   письмо автору
 
   для: cheops   (25.06.2011 в 09:54)
 

теперь то, что в УРЛ не становится ссылкой, а простым текстом с тегами по бокам

  Ответить  
 
 автор: cheops   (25.06.2011 в 12:04)   письмо автору
 
   для: dimon3191   (25.06.2011 в 10:33)
 

Если не сложно, приведите пример исходного текста, чтобы можно было воспроизвести ситуацию.

  Ответить  
 
 автор: dimon3191   (25.06.2011 в 12:15)   письмо автору
 
   для: cheops   (25.06.2011 в 12:04)
 


<?php include "incl/hdr.inc";$fs=opl();$mmu=0;

$entry str_replace("\r\n""[br]"$entry);

if(!isset(
$nnk)){sdd('index.php');}else{
$nnk=urldecode($nnk);$nnk=explode(":|:",$nnk);
$nick=$nnk[2];$bick=$nnk[3];
$gtk="$pp:|:$REMOTE_ADDR:|:$nick:|:$bick";setcookie('nnk',$gtk);
$j=0;$fx=array();$fy=opu();$fy=explode("\n",$fy);

for(
$i=0;$i<count($fy);$i++){
if(isset(
$fy[$i])&&$fy[$i]!=''){$rt=explode(":|:",$fy[$i]);
if(
$pp-$rt[0]<70&&$rt[2]!=$nick){$fx[$j]=$fy[$i];$j++;}
}}
$fx=implode("\n",$fx);$fx="$gtk\n$fx";wru($fx);}

if(isset(
$entry)&&$entry!=''&&isset($nnk)){$entry=htmsp($entry);
$n1=explode(':','\\\\:\\":\\\':::[c]:::[/c]:=):=(:=D:[u]:[/u]:[br]');
$n2=explode(':','\:":\': <b>: <i>: <span class="y">:</b> :</i> :</span> :<img src="pics/sm/u.gif" width="19" height="19" hspace="2" alt=""> :<img src="pics/sm/g.gif" width="19" height="19" hspace="2" alt=""> :<img src="pics/sm/r.gif" width="19" height="19" hspace="2" alt=""> :<u> :</u> :<br>');
for(
$i=0;$i<count($n1);$i++){$entry=str_replace($n1[$i],$n2[$i],$entry);}
  
  
$pattern "#\[url\][\s]*([\S]*)[\s]*\[\/url\]#si";
  
$entry preg_replace_callback($pattern,"url_replace",$entry);
  function 
url_replace($matches)
  {
      if(
substr($matches[1], 07) != "http://"$matches[1] = "http://".$matches[1];
      return 
"<a href='$matches[1]' target='_blank'>$matches[1]</a>";
  }
//$entry = preg_replace("#\[url\][\s]*([\S]*)[\s]*\[\/url\]#si",'<a href="\\1" target=_blank>\\1</a>',$entry);
$entry preg_replace("#\[url[\s]*=[\s]*([\S]+)[\s]*\][\s]*([^\[]*)\[/url\]#isU",'<a href="\\1" target=_blank>\\2</a>',$entry);
$eep="$pp:|:$datetime:|:$nnk[2]:|:$nnk[3]:|:$entry\n$fs";wrl($eep);}
?>

  Ответить  
 
 автор: cheops   (25.06.2011 в 12:18)   письмо автору
 
   для: dimon3191   (25.06.2011 в 12:15)
 

Нет, имеется в виду текст, который подвергается преобразованию и где есть тэги, которые нужно заменить на ссылку (а они не заменяются).

  Ответить  
 
 автор: dimon3191   (25.06.2011 в 12:32)   письмо автору
55 Кб
 
   для: cheops   (25.06.2011 в 12:18)
 

вот полностью весь исходник

  Ответить  
 
 автор: cheops   (25.06.2011 в 14:25)   письмо автору
 
   для: dimon3191   (25.06.2011 в 12:32)
 

Да, нет, речь не об исходных кодах, а о тексте, с тэгами [ url] и [ /url], которые не получается обработать? Т.е. примере, на котором вы тестируете регулярное выражение?

  Ответить  
 
 автор: dimon3191   (25.06.2011 в 14:33)   письмо автору
 
   для: cheops   (25.06.2011 в 14:25)
 

[url]one.lt[/url]

  Ответить  
 
 автор: cheops   (25.06.2011 в 14:37)   письмо автору
 
   для: dimon3191   (25.06.2011 в 14:33)
 

У вас следующий скрипт срабатывает?
<?php 
  $entry 
"[url]one.lt[/url]";
  
$pattern "#\[url\][\s]*([\S]*)[\s]*\[\/url\]#si"
  
$entry preg_replace_callback($pattern
               
"url_replace"
                
$entry);
  echo 
$entry
  function 
url_replace($matches
  { 
      if(
substr($matches[1], 07) != "http://"$matches[1] = "http://".$matches[1]; 
      return 
"<a href='$matches[1]' target='_blank'>$matches[1]</a>"
  } 
?>

  Ответить  
 
 автор: dimon3191   (25.06.2011 в 14:41)   письмо автору
 
   для: cheops   (25.06.2011 в 14:37)
 

нее

  Ответить  
 
 автор: cheops   (25.06.2011 в 15:46)   письмо автору
 
   для: dimon3191   (25.06.2011 в 14:41)
 

Хм... странно, а у меня работает. У вас какая версия PHP и Apache?

  Ответить  
 
 автор: dimon3191   (25.06.2011 в 15:49)   письмо автору
 
   для: cheops   (25.06.2011 в 15:46)
 

php 5.3.6.0
но серв не апача, а иис

  Ответить  
 
 автор: Deed   (26.06.2011 в 07:09)   письмо автору
 
   для: cheops   (25.06.2011 в 15:46)
 

Может, редкая кодировка какая?

  Ответить  
 
 автор: Deed   (25.06.2011 в 20:43)   письмо автору
 
   для: dimon3191   (25.06.2011 в 09:37)
 


<?php            
  
  $urul
='[url]one.lt[/url] motrt nbfdj dkf364 
rpfjgvnhg ndkjbve jdfbvdig skdj6978787.555dfb/fdb. fdvgrgv, fagvavg [url]deed.net.ua[/url]'
;

$num_links=preg_match_all("/\[url\](\S+?)\[\/url\]/is",$urul,$matches);



if(
$num_links>0){
    for(
$i=0;$i<$num_links;$i++){
        
        
$http=substr($matches[1][$i],0,6);
        if(
$http!='http://'){
            
            
$link="http://".$matches[1][$i];
        }
        
$search[]=$matches[0][$i];
        
$replace[]="<a href=\"$link\" target=\"_blank\">$link</a>";
    }
    
$itog=str_replace($search,$replace,$urul);
    
    
}          
else {
    
    
$itog=$urul;
}
            
echo 
$itog;
?>

  Ответить  
 
 автор: dimon3191   (25.06.2011 в 21:07)   письмо автору
 
   для: Deed   (25.06.2011 в 20:43)
 

тоже не срабатывает
выводит просто текст
[url]one.lt[/url]

  Ответить  
 
 автор: Deed   (26.06.2011 в 09:40)   письмо автору
46.6 Кб
 
   для: Deed   (25.06.2011 в 20:43)
 


<?php            
  
  $urul
='[url]one.lt[/url] motrt nbfdj dkf364 
rpfjgvnhg ndkjbve jdfbvdig skdj6978787.555dfb/fdb. fdvgrgv, fagvavg [url]deed.net.ua[/url]'
;

$num_links=preg_match_all("/\[url\](\S+?)\[\/url\]/is",$urul,$matches);



if(
$num_links>0){
    for(
$i=0;$i<$num_links;$i++){
        
        
$http=substr($matches[1][$i],0,6);
        if(
$http!='http://'){
            
            
$link="http://".$matches[1][$i];
        }
       else {
$link=$matches[1][$i];} // Т.е. если в конструкции присутствует "http://", оставляем без изменений.

        
$search[]=$matches[0][$i];
        
$replace[]="<a href=\"$link\" target=\"_blank\">$link</a>";
    }
    
$itog=str_replace($search,$replace,$urul);
    
    
}          
else {
    
    
$itog=$urul;
}
            
echo 
$itog;
?> 

  Ответить  
 
 автор: dimon3191   (27.06.2011 в 07:59)   письмо автору
 
   для: Deed   (26.06.2011 в 09:40)
 

тоже самое

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования