chrisnetonline
asked on
Concatenated URL's - RegEx
$search = array('#\[url]([a-z0-9]+?:
$replace = array('<a href="\1\2" target="_blank" title="\1\2">link</a>', '<a href="http://\1" target="_blank" title="\1">link</a>' );
$str = preg_replace($search, $replace, $str);
here's the current bbcode script for replacing [url]http://url_here[/url] with link
i wanna change it so it's it shows the link but if its past 'X' amount of characters it cuts out the middle of the link and replaces it with '...'
i.e.
ORIGINAL: https://www.experts-exchange.com/Web/Web_Languages/PHP/askQuestion.jsp
UPDATED: http://www.experts-exch...HP/askQuestion.jsp
Oops, this: substr($1.$2,$f_len,($h-$f _len)); should be
substr($1.$2,$f_len,($l-$f _len));
Regards
substr($1.$2,$f_len,($l-$f
Regards
ASKER
how would this be implemented though? i dont see how that code is being run on the URL...
Try putting it on the line after $search = blah but before $replace = blah
ASKER
okay so here's the code i have:
<?php
function run_test($str)
{
$search = array('#\[url]([a-z0-9]+?: //){1}([\w \-]+\.([\w \-]+\.)*[\ w]+(:[0-9] +)?(/[^ \"\n\r\t<]*)?)\[/url\]#', '#\[url]((www|ftp)\.([\w\- ]+\.)*[\w] +(:[0-9]+) ?(/[^ \"\n\r\t<]*?)?)\[/url\]#') ;
if ($l=strlen($1.$2)>30) {
$checkEnd=explode("/",$1.$ 2);
$f_len=strlen($checkEnd(co unt($check End)-1))+3 ;
$f_len=gmp_neg($f_len);
$cut_link=substr($1.$2,0,2 3)."...".s ubstr($1.$ 2,$f_len,( $l-$f_len) );
} else {
$cut_link=$1.$2;
}
$replace = array('<a href="\1\2" target="_blank" title="\1\2">'.$cut_link.' </a>', '<a href="http://\1" target="_blank" title="\1">'.$cut_link.'</ a>' );
$str = preg_replace($search, $replace, $str);
return $str;
}
echo run_test("[url]https://www.experts-exchange.com/questions/21124048/Concatenated-URL's-RegEx.html[/url]");
?>
i get the following error:
Parse error: parse error, unexpected T_DNUMBER, expecting T_VARIABLE or '$' in /var/www/html/chris/test.p hp on line 7
<?php
function run_test($str)
{
$search = array('#\[url]([a-z0-9]+?:
if ($l=strlen($1.$2)>30) {
$checkEnd=explode("/",$1.$
$f_len=strlen($checkEnd(co
$f_len=gmp_neg($f_len);
$cut_link=substr($1.$2,0,2
} else {
$cut_link=$1.$2;
}
$replace = array('<a href="\1\2" target="_blank" title="\1\2">'.$cut_link.'
$str = preg_replace($search, $replace, $str);
return $str;
}
echo run_test("[url]https://www.experts-exchange.com/questions/21124048/Concatenated-URL's-RegEx.html[/url]");
?>
i get the following error:
Parse error: parse error, unexpected T_DNUMBER, expecting T_VARIABLE or '$' in /var/www/html/chris/test.p
Try changing this line:
$f_len=strlen($checkEnd(co unt($check End)-1))+3 ; to
$f_len=strlen($checkEnd[co unt($check End)-1])+3 ;
$f_len=strlen($checkEnd(co
$f_len=strlen($checkEnd[co
ASKER
still getting the following error:
Parse error: parse error, unexpected T_DNUMBER, expecting T_VARIABLE or '$' in /var/www/html/chris/test.p hp on line 7
Parse error: parse error, unexpected T_DNUMBER, expecting T_VARIABLE or '$' in /var/www/html/chris/test.p
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thank you Zyloch... your code lead me to the answer i was looking for... the completed code is included below
function shorten_url($matches)
{
$str=$matches[1].$matches[ 2];
$len=strlen($str);
if($len > 50)
{
$checkEnd=explode('/', $str);
$f_len=strlen($checkEnd[co unt($check End)-1])+1 ;
if($f_len == 1)
{
$f_len=strlen($checkEnd[co unt($check End)-2])+1 ;
}
elseif($f_len < 25)
{
$f_len=(($f_len < 0)?($f_len * -1):($f_len * -1));
$cut_link=substr($str, 0, 25).'...'.substr($str, $f_len, ($len-$f_len));
}
else
{
$cut_link=substr($str, 0, 25).'...'.substr($str, -25);
}
}
else
{
$cut_link=$str;
}
return '<a href="'.$str.'" target="_blank" title="'.$str.'">'.$cut_li nk.'</a>';
}
$str = '[url]https://www.experts-exchange.com/questions/21124048/Concatenated-URL's-RegEx.html[/url]';
$search = array('#\[url]([a-z0-9]+?: //){1}([\w \-]+\.([\w \-]+\.)*[\ w]+(:[0-9] +)?(/[^ \"\n\r\t<]*)?)\[/url\]#');
$str = preg_replace_callback($sea rch, 'shorten_url', $str);
function shorten_url($matches)
{
$str=$matches[1].$matches[
$len=strlen($str);
if($len > 50)
{
$checkEnd=explode('/', $str);
$f_len=strlen($checkEnd[co
if($f_len == 1)
{
$f_len=strlen($checkEnd[co
}
elseif($f_len < 25)
{
$f_len=(($f_len < 0)?($f_len * -1):($f_len * -1));
$cut_link=substr($str, 0, 25).'...'.substr($str, $f_len, ($len-$f_len));
}
else
{
$cut_link=substr($str, 0, 25).'...'.substr($str, -25);
}
}
else
{
$cut_link=$str;
}
return '<a href="'.$str.'" target="_blank" title="'.$str.'">'.$cut_li
}
$str = '[url]https://www.experts-exchange.com/questions/21124048/Concatenated-URL's-RegEx.html[/url]';
$search = array('#\[url]([a-z0-9]+?:
$str = preg_replace_callback($sea
Can't tell, but you can try this: (probably not most effective though)
if ($l=strlen($1.$2)>30) {
$checkEnd=explode("/",$1.$
$f_len=strlen($checkEnd(co
$f_len=gmp_neg($f_len);
$cut_link=substr($1.$2,0,2
} else {
$cut_link=$1.$2;
}
$replace = array('<a href="\1\2" target="_blank" title="\1\2">$cut_link</a>
Regards,
Zyloch