|
|
|
| есть рег. выражение которое преобразует ссылки типа http://сайт.ру в [url] тегах
$entry = preg_replace("#\[url\][\s]*([\S]*)[\s]*\[\/url\]#si",'<a href="\\1" target=_blank>\\1</a>',$entry);
|
но если ссылка без http:// то ссылка не получается
как добавить http:// к ссылке и не делать этого если http:// уже есть ? | |
|
|
|
|
|
|
|
для: 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], 0, 7) != "http://") $matches[1] = "http://".$matches[1];
return "<a href='$matches[1]' target='_blank'>$matches[1]</a>";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(25.06.2011 в 09:54)
| | теперь то, что в УРЛ не становится ссылкой, а простым текстом с тегами по бокам | |
|
|
|
|
|
|
|
для: dimon3191
(25.06.2011 в 10:33)
| | Если не сложно, приведите пример исходного текста, чтобы можно было воспроизвести ситуацию. | |
|
|
|
|
|
|
|
для: 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], 0, 7) != "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);}
?>
|
| |
|
|
|
|
|
|
|
для: dimon3191
(25.06.2011 в 12:15)
| | Нет, имеется в виду текст, который подвергается преобразованию и где есть тэги, которые нужно заменить на ссылку (а они не заменяются). | |
|
|
|
|
 55 Кб |
|
|
для: cheops
(25.06.2011 в 12:18)
| | вот полностью весь исходник | |
|
|
|
|
|
|
|
для: dimon3191
(25.06.2011 в 12:32)
| | Да, нет, речь не об исходных кодах, а о тексте, с тэгами [ url] и [ /url], которые не получается обработать? Т.е. примере, на котором вы тестируете регулярное выражение? | |
|
|
|
|
|
|
|
для: cheops
(25.06.2011 в 14:25)
| | | |
|
|
|
|
|
|
|
для: 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], 0, 7) != "http://") $matches[1] = "http://".$matches[1];
return "<a href='$matches[1]' target='_blank'>$matches[1]</a>";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(25.06.2011 в 14:37)
| | нее | |
|
|
|
|
|
|
|
для: dimon3191
(25.06.2011 в 14:41)
| | Хм... странно, а у меня работает. У вас какая версия PHP и Apache? | |
|
|
|
|
|
|
|
для: cheops
(25.06.2011 в 15:46)
| | php 5.3.6.0
но серв не апача, а иис | |
|
|
|
|
|
|
|
для: cheops
(25.06.2011 в 15:46)
| | Может, редкая кодировка какая? | |
|
|
|
|
|
|
|
для: 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;
?>
|
| |
|
|
|
|
|
|
|
для: Deed
(25.06.2011 в 20:43)
| | тоже не срабатывает
выводит просто текст
| |
|
|
|
|
 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;
?>
|
| |
|
|
|
|
|
|
|
для: Deed
(26.06.2011 в 09:40)
| | тоже самое | |
|
|
|