EDIT: Gelöst siehe unten
Hab echt ein Problem preg_replace zu verstehen.
Ich versuche krampfhaft eine function in preg_replace zu nutzen.
Aber irgentwie bekomme ich nix von linkShorter() zurück. Aber wieso?
Hier der versuch:
PHP
function linkShorter($link)
{
$link_max_len = 25;
if(strlen($link)>$link_max_len){
if(($url=parse_url($link))and($host=$url['host'])and($path=$url['path'])){
$linkname = $host;
if(($rest=$link_max_len-(strlen($host)+4)) > 10){
$linkname .= '/...'.substr($path,-$rest);
}
return $linkname;
}else{
return substr($link,($link_max_len-3)).'...';
}
}
return $link;
}
$text = 'test text bla http://www.php.net/manual/de/function.preg-replace.php und so und so';
# linkShorter() test
echo linkShorter('http://php.net/manual/de/function.preg-replace.php');
# was funktioniert:
$search = "/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i";
$replace = '<a class="mb_widget_feed_link" href="'."$1".'" target="_blank">'."$1".'</a>';
$text = preg_replace($search, $replace, $text);
echo '<pre>'; print_r($text); echo '</pre>';
# was ich versuche:
$search = "/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i";
$replace = '<a class="mb_widget_feed_link" href="'."$1".'" target="_blank">'.linkShorter("$1").'</a>';
$text = preg_replace($search, $replace, $text);
echo '<pre>'; print_r($text); echo '</pre>';
Alles anzeigen
Output:
Zitat
php.net/...eg-replace.php
test text bla http://www.php.net/manual/de/function.preg-replace.php und so und so
test text bla http://www.php.net/manual/de/function.preg-replace.php und so und so
EDIT: Lösung und gleich (falls es mal jemand braucht) die functions:
PHP
$text = '
email.soundso@gmail.com
https://www.youtube.com/watch?v=ZswRpZ0Y_Js
www.i.imgur.com/0ttt4qp.png
http://www.youtube.com/watch?v=umfsZ_qsISQ
http://battlelog.battlefield.com/bf3/soldier/cottton/assignments/351412248/cem_ea_id/
http://www.php-einfach.de/tuts_php_links.php
https://metabans.net/private.php?do=showpm&pmid=1794
http://www.html-seminar.de/html-css-php-forum/board40-themenbereiche/board18-php/4089-preg-replace-mit-function-nutzen/#post28655
http://www.woltlab.com/forum/burning-board-3-1-volcano/fragen-zu-technischen-problemen/207198-fatal-error-allowed-memory-size/?#post1219541
http://3341808.fls.doubleclick.net/activityi;src=3341808;type=fy12b248;cat=ea_fy112;ord=56483662.78471018?&_dc_ck=try
http://anticheatinc.com/rtstarena/pending/3381424c84a42420c88b3943ae02e16f_0.png%20
';
function linker($text,$url_class=false,$url_target='_self',$linkShorter=false) # linker() credits: "Andavos" -> http://www.php-einfach.de/tuts_php_links.php # edited by [i-stats.net]cottton
{
//Aus http://url wird [URL]http://url[/URL]
$urlsuch[]="/([^]_a-z0-9-=\"'\/])((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";
$urlsuch[]="/^((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";
$urlreplace[]="\\1[URL]\\2\\4[/URL]";
$urlreplace[]="[URL]\\1\\3[/URL]";
//Aus klaus@mustermann.de wird [EMAIL]klaus@mustermann.de [/EMAIL]
$emailsuch[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
$emailsuch[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
$emailreplace[]="\\1[EMAIL]\\2[/EMAIL]";
$emailreplace[]="[EMAIL]\\0[/EMAIL]";
$text = preg_replace($urlsuch, $urlreplace, $text);
if(strpos($text,"@")){
$text = preg_replace($emailsuch, $emailreplace, $text);
}
$class = "";
if($url_class){
$class = " class=\"".$url_class."\"";
}
if(!$linkShorter){
$replace = "<a".$class." href=\"%REFER_HREF%\" target=\"".$url_target."\">%REFER_NAME%</a>";
$eval = '';
}elseif(is_numeric($linkShorter)){
$replace = "'<a".$class." href=\"%REFER_HREF%\" target=\"".$url_target."\">'.linkShorter('%REFER_NAME%',".$linkShorter.").'</a>'";
$eval = 'e';
}else{
die('<b>Error:</b> '.htmlspecialchars(__FUNCTION__).'() expects parameter 4 to be numeric or blool, "'.htmlspecialchars($linkShorter).'" given in '.htmlspecialchars(__FILE__).' on line '.htmlspecialchars(__LINE__));
}
//Die URL's werden zu Links
$text = preg_replace("/\[URL\]www.(.*?)\[\/URL\]/si".$eval."", str_replace('%REFER_NAME%',"$1",str_replace('%REFER_HREF%',"http://www.$1",$replace)), $text);
$text = preg_replace("/\[URL\](.*?)\[\/URL\]/si".$eval."", str_replace('%REFER_NAME%',"$1",str_replace('%REFER_HREF%',"$1",$replace)), $text);
$text = preg_replace("/\[URL=www.(.*?)\](.*?)\[\/URL\]/si".$eval."", str_replace('%REFER_NAME%',"$2",str_replace('%REFER_HREF%',"http://www.$1",$replace)), $text);
$text = preg_replace("/\[URL=(.*?)\](.*?)\[\/URL\]/si".$eval."", str_replace('%REFER_NAME%',"$2",str_replace('%REFER_HREF%',"$1",$replace)), $text);
//E-Mail Adressen werden zu links
$text = preg_replace("/\[EMAIL\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\1</a>", $text);
$text = preg_replace("/\[EMAIL=(.*?)\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\2</a>", $text);
//[IMG]bild.jpg[/IMG] wird als Bild angezeigt
#$text = preg_replace("/\[IMG\](.*?)\[\/IMG\]/si", "<img src=\"\\1\" border=\"0\">", $text);
return $text;
}
function linkShorter($link,$link_max_len=40,$glue='/...',$glue_query='...') #echo "<pre>";print_r($url);echo "</pre>";
{
$link = str_replace(array('https://','http://','www.'),'',$link);
$just_cut = substr($link,0,-(strlen($link)-($link_max_len-strlen($glue_query)))).$glue_query;
if($url=parse_url($link)){
$host = false;
if(isset($url['host'])){
$host = $url['host'];
}
$path = false;
if(isset($url['path'])){
$path = $url['path'];
}
$query = false;
if(isset($url['query'])){
$query = $url['query'];
}
}
if(strlen($link)>$link_max_len){
if($host and $path){
if(strlen($host) > $link_max_len){
return $just_cut;
}elseif(strlen($host.$path) > $link_max_len){
if(($minus=$link_max_len-(strlen($host)+strlen($glue))) < (strlen($glue)*1.5)){
return $just_cut;
}else{
return $host.$glue.substr($path,-$minus);
}
}elseif(strlen($host.$path.$query) > $link_max_len){
if(($minus=$link_max_len-(strlen($host)+strlen($path)+strlen($glue_query))) < (strlen($glue_query)*1.5)){
return $host.$path.$glue_query;
}else{
return $host.$path.$glue_query.substr($query,-$minus);
}
}else{
return $host.$path.$query;
}
}else{
return $just_cut;
}
}
return $link;
}
echo '<h1>Test mit linker() und linkShorter() (link länge: 50)</h1>'.nl2br(linker($text,'class_name','_blank',50));
echo '<hr /><h1>Test mit linker() und linkShorter() (link länge: 25)</h1>'.nl2br(linker($text,'class_name','_blank',25));
echo '<hr /><h1>Test nur mit linker()</h1>'.nl2br(linker($text,'class_name','_blank',0));
Alles anzeigen
also ich finde linkShorter() hab ich gut hinbekommen =)