Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
URl erkennen und kürzen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




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);

}


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:16 Uhr.