preg_replace -> stringlänge -> problem

scare05

Grünschnabel
hallo,
ich habe folgenden code mit dem ich urls in links umwandle...

$message = preg_replace("#(<a\s[^>]+>http://[^\s]+</a>)|(<[^>]+http://[^>]+>)|http://[^\s]+#ie",'"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"$0\">$0</a>"',$message);

aufgrund der recht beschränkten breite des fensters wo die url dann auftauchen soll, möchte den ausgabe string begrenzen, so dass bei elend langen urls nach eine gewissen anzahl von zeichen nur noch "..." rangehangen wird bzw. wie hier im forum mittendrin wie z.b. so....

http://www.gdfhjgsdfjkhgkdjfgh.de/d...shgl4789tvls487pq759325g9q237göhlq92375lg.jpg

ich weiß jetzt nur nicht, wie und wo ich die zeichenbeschränkung implementieren soll. auf die variable message kann ich das leider nicht machen, da die url nur ein ausschnitt aus der ganzen message sein soll.

danke schonmal
 
geh mal bitte genauer auf
ich weiß jetzt nur nicht, wie und wo ich die zeichenbeschränkung implementieren soll. auf die variable message kann ich das leider nicht machen, da die url nur ein ausschnitt aus der ganzen message sein soll.
ein
 
also, ich lese für mein gästebuch die einträge aus der datenbank.
wenn jemand jetzt eine megalange url gepostet hat mit über 200 zeichen, dann wird das auf meiner seite nicht so schön angezeigt, da die url die tabelle soweit auseinanderdrückt (da kein umbruch) so dass das ddesign der site fürn ar*** ist... nun möchte ich das so machen wie z.b. hier forum, dass ich sagen kann, die urls die er replaced zum anklickbaren link (s.o.) nur eine gesamtlänge von 100 zeichen haben soll und dann entweder mittendrin oder am ende der gekürzten url ein "..." erscheint... (siehe auch oben der beispiellink)...
nur weiß ich nicht wie ich das machen soll...
 
naja wenn das oben passt dann Bau es doch da auch gleich noch mit ein :)
du machst doch da eh nen replace
PHP:
<a href=\"$0\">$0</a>
wenn du hier nun einfach schreibst
PHP:
<a href=\"$0\">substr($0,0,100)</a>
ist es doch das was du willst oder? :)

also
PHP:
$message = preg_replace("#(<a\s[^>]+>[ url]http://[ /url][^\s]+</a> )|(<[^>]+[ url]http://[ /url][^>]+> )|[ url]http://[ /url][^\s]+#ie",'"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"$0\">".subtr($0,0,100)."</a>"',$message);
klar hier werden nun zwar keine '...' am ende hingesetzt
aber wenn du dir einfach ne Funktion schreibst die das macht und die dann statt dem substr einsetzt dann haste ja das Ergebnis :)
also
PHP:
substrWithDots($string,$maxlength){
if($string <= $maxlength)
return $string
return substr($string,0,$maxlength)."...";
}

$message = preg_replace("#(<a\s[^>]+>[ url]http://[ /url][^\s]+</a> )|(<[^>]+[ url]http://[ /url][^>]+> )|[ url]http://[ /url][^\s]+#ie",'"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"$0\">".substrWithDots($0,100)."</a>"',$message);
das board macht hier aber diese {url} tags raus also vorsicht ^^
 
Zuletzt bearbeitet:
hatte ich auch schon probiert, dann erhalte ich aber folgendes als ausgabe...

substr(http://www.gdfhjgsdfjkhgkdjfgh.de/dflgsdfksgjsdsdfgsdfgdshgl4789tvls487pq759325g9q237göhlq92375lg.jpg,0,100)

und das ist nicht so ganz was ich will... :)
 
hab die zeile mal so übernommen, erhalte aber nun einen parse error...

Parse error: parse error, unexpected T_STRING in ... on line ... :(
 
hmm ok ich frag nun mal anders
was versuchst du genau mit dem Regex zu ersetzen?
wenn du mir das sagst kann ich dir auch eben nen Regex schreiben *G* ist leichter! :)
 
ich will das er mir alle urls die ein user postet als anklickbare links ausgibt...

http://www.dssdfsd.de
www.sdgsdg.de/sdfsd/sdfs.jpg
etc.

es geht also nur um urls
 
Zurück