Archiv verlassen und diese Seite im Standarddesign anzeigen : URl erkennen und kürzen
Daniel1975 06-11-2008, 06:47 Ich habe folgendes Problem mit dem Kürzen einer URl. Ich verwende den folgenden Code um aus einem Text eine URl zu erkennen und klickbar zu machen.
function make_clickable($str) {
global $mumConf;
$pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
return preg_replace($pattern,"\\1<a href=\"\\2\\3\"
target=\"_blank\">".substr('\\2\\3',0,25)."
".$mumConf['marker_link']."</a>\\4",$str);
}
Problem ist, dass die URl nicht gekürzt wird. Die URl wird in voller Länge angezeigt. Ist die Kombination von preg_replace und substr in dieser Form nicht möglich oder ist da ein Fehler?
MelloPie 06-11-2008, 06:58 also erstmal fehlt in deinem pattern ein )
MelloPie 06-11-2008, 07:00 da stand doch vorhin noch ein ganz anderes pattern????
Daniel1975 06-11-2008, 07:06 So, jetzt klappts. Mit php-Tag wird der Code nicht richtig umgesetzt. Mit dem code-Tag klappts. Bei pattern wurde vorhin ein Smilie erkannt. Ich hatte es vergessen zu deaktivieren. Jetzt stimmt der Code eins zu eins, wie er verwendet wird.
Frage: Wo fehlt die Klammer?
MelloPie 06-11-2008, 07:09 ja in deinem ersten pattern das hier stand da fehlte ne klammer und das pattern war voll der müll, aber gut das kam durchs forum
MelloPie 06-11-2008, 07:19 Du brauchst den modifier e in deinem pattern, dann wird der ersatz wie eval behandelt.
Daniel1975 06-11-2008, 07:40 Klappt bei mir nicht. Da kommt folgende Fehlermeldung:
Parse error: parse error in F:\inetpub\wwwroot\dad5_oeoe\function.php(575) : regexp code on line 1
Fatal error: Failed evaluating code: http://www.lastfm.de/group/xxxx< in F:\inetpub\wwwroot\dad5_oeoe\function.php on line 575
$pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sme';
MelloPie 06-11-2008, 07:51 also ich habs probiert und bekomme es nur hin wenn ich erst Dein pattern nehme und danach nochmal mit modifier e durchjage und nur die uri zwischen <a></a> ersetze alles andere kann mit modifier e nicht evaluiert werden..
Also quasi:
$str = preg_replace($pattern,"\\1<a href=\"\\2\\3\"
target=\"_blank\">".'\\2\\3'."
</a>\\4",$str);
und dann $pattern = $pattern.'e';
und dann return preg_replace($pattern,"substr('\\0',0,25)",$str);
Daniel1975 06-11-2008, 08:27 function make_clickable($str) {
$pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
$str = preg_replace($pattern,"\\1<a href=\"\\2\\3\"
target=\"_blank\">".'\\2\\3'."</a>[...]\\4",$str);
$pattern = $pattern.'e';
return preg_replace($pattern,"substr('\\0',0,40)",$str);
}
ergibt noch einen kleinen Fehler in den Links. Es wird immer /a> angehangen. Irgendwo wird da etwas falsch getrennt bzw. übergeben.
Bsp:
http://www.lastfm.de/group/Sebnitz+tes/a>[...]
http://172.21.64.111/dad5_oeoe/dokum/a>[...]
MelloPie 06-11-2008, 08:44 joa füg mal vo </a> ein leerzeichen ein
Daniel1975 06-11-2008, 09:49 so klappts - wie gewollt:
//URls erkennen und clickbar machen / URls kuerzen
function make_clickable($str) {
global $mumConf;
$pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
$str = preg_replace($pattern,"\\1<a href=\"\\2\\3\"
target=\"_blank\"> ".'\\2\\3'." </a> <a href=\"\\2\\3\"
target=\"_blank\"> ".$mumConf['marker_link']." </a>\\4",$str);
$pattern = $pattern.'e';
return preg_replace($pattern,"substr('\\0',0,30)",$str);
}
|
|