ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
762
762
EMPFEHLEN
-
Hi all,
vllt wurde das hier ja schon durchgenommen und ich hab auch die Forensuche benutzt aber wenn etwas dabei war, hab ichs net kapiert.
Mein Problem ist, das die Inhalte meiner neuen Homepage in einer DB stehen. Wenn ich die Variable "$Contetn" ausgebe, werden zunächst alle Zeilenumbrüche in "<br>" umgewandelt.
Das ist gut und soll auch so bleiben, nur will ich jetzt zusätzlich noch haben, das alle links , z.B. "www.domain.de" durch "<a href='http://www.domain.de' target='_blank'>www.domain.de</a>" ersetzt werden...
Ich weis das es mit preg_match_all gehen muss, nur hab ich immer das Problem das das Suchmuster für mich aussieht wie einer aneinanderreihung von Flüchen, z.B. sowas "/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", damit kann ich leider nix anfangen, gibts vllt ne Seite wo erklärt wird wie man solche Suchmuster schreibt oder kann mir einer sagen, wie das Suchmuster für mein Problem aussehen muss?
Danke,
cAm3eel
-
Wenn du etwas ersetzen willst, verwende preg_replace()
Code :1
preg_replace('@http://(\S+)@','<a href="http://\\1" target="_blank">\\1</a>',$Contetn);
Zum Thema findest du hier ein Tutorial.
-
Mein Vorschlag:
Ist zwar etwas umfangreicher jedoch auch präziser, so wird beispielsweise das Wort „http://-Prafix“ nicht als URL erkannt.PHP-Code:<?php
$url_patterns = array(
// @link http://internet.ls-la.net/folklore/url-regexpr.html
'http' => "(?:https?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))?)?)",
'ftp' => "(?:ftp://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:;type=[AIDaid])?)?)",
'mailto' => "(?:mailto:(?:(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))+))"
);
$pattern = '/(' . addcslashes($url_patterns['http'], chr(0x2F)) . '|' . addcslashes($url_patterns['ftp'], chr(0x2F)) . '|' . addcslashes($url_patterns['mailto'], chr(0x2F)) . ')/';
$string = preg_replace($pattern, '<a href="\\1">\\1</a>', $string);
?>Markus Wulftange
-
Danke Gumbo, funktioniert perfekt!
Sven, dein Code hat leider nicht funktioniert, weis au net warum... (kam keine Fehlermeldung aber hat eben au net funktioniert...)
Nur versteht ich das Suchmuster in dem Code von Gumbo jetzt auch nicht, kann man das irgendwo lernen oder sowas?
MfG
cAm3eel
-
Beide Vorschläge basieren auf regulären Ausdrücken. Diese scheinen auf der ersten Blick sehr kryptisch, sind jedoch nach einiger Übung schnell zu durchschauen. Übrigens stammt der von mir benutzte reguläre Ausdruck nicht aus meiner Feder, sondern ist eine ausgesuchte Kopie des kompletten regulären Ausdrucks eines URL.
Bei der Findung eines regulären Ausdrucks kann übrigens der „Regex Coach“ sehr hilfreich sein.Markus Wulftange
-
Danke, der erste Link hat sehr geholfen, jetzt kapier ichs glaub ein bissel, thx.
cAm3eel
-
Hi Leute,
ich hab gedacht ich benutze diesen Thread da er sowieso zum Thema passt ...
also ich habe eine Funktion geschrieben, die einen String nach URL's durchsucht, wie hier ja schon beschrieben wurde, danach werden alle gefundenen URL's in HTML-Links umgewandelt, die Funktion sieht dann so aus:
... das funktioniert ja dann auch ganz gut, solang bis der zu durchsuchende string zwei Adressen enthält, von denen die eine bestandteil der anderen ist ... hört sich sehr unwahrscheinlich an, ist es wahrscheinlich auch, ich hab es aber beim testen gemerkt und doch noch ein wahrscheinliches Beispiel gefunden ...PHP-Code:<?php
function urlhighlight($str) {
$pre_pattern = "(?:https?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=#])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=#])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=#])*))?)?)";
$pattern = "/".addcslashes($pre_pattern, chr(0x2F))."/is";
preg_match_all($pattern,$str,$lnk);
$size = sizeof($lnk[0]);
$i = 0;
while ($i < $size) {
$len = strlen($lnk[0][$i]);
if($len > 63) {
$lnk_txt = substr($lnk[0][$i],0,30)." \[...\] ".substr($lnk[0][$i],-30,30);
} else {
$lnk_txt = $lnk[0][$i];
}
$ahref = $lnk[0][$i];
$str = str_replace($ahref,"<a href=\"".$ahref."\">$lnk_txt</a>",$str);
$i++;
}
return $str;
}
angenommen der User schreibt zwei Adressen seiner Homepage in den string
dann bekomm ich das ergebnis:PHP-Code:$string = "blabla meine website: http://www.atcq.de und meine website: http://www.atcq.de/wap"
also beim erstenmal werden beide vorkommen von http://www.atcq.de ersetzt also auch in http://www.atcq.de/wap und die URL http://www.atcq.de/wap zerfetzt ... schlimmer ist es noch wenn http://www.atcq.de/wap vor http://www.atcq.de kommt ... dann wird http://www.atcq.de inHTML-Code:meine website: <a href="http://www.atcq.de">http://www.atcq.de</a> und meine website: <a href="http://www.atcq.de">http://www.atcq.de</a>/wap
und in <a href="...">http://www.atcq.de/wap</a> ersetzt!HTML-Code:<a href="http://www.atcq.de/wap">
hoffe das war einigermaßen verständlich ...
hat jmd. ne Idee wie ich das verhindern kann?
Grüße und schonmal Danke
-
Mein Vorschlag:
PHP-Code:function html_parseURLs( $str, $limit=false )
{
$subPattern = "(?:https?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=#])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=#])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=#])*))?)?)";
if( !$limit ) {
return preg_replace('/'.addcslashes($subPattern, '/').'/eis', 'html_shortenURL("\0")', $str);
} else {
return preg_replace('/'.addcslashes($subPattern, '/').'/eis', 'html_shortenURL("\0", '.$limit.')', $str);
}
}
function html_shortenURL( $url, $limit=false )
{
if( !$limit ) {
return $url;
}
$return = '<a href="'.htmlspecialchars($url).'">';
if( $limit < strlen($url) ) {
$return .= htmlspecialchars(substr($url, 0, floor($limit/2))) . '…' . htmlspecialchars(substr($url, ceil($limit/2)*-1));
} else {
$return .= htmlspecialchars($url);
}
return $return . '</a>';
}
Markus Wulftange
-
cool, das ging ja schnell ... ich werd es heut abend mal ausprobieren und versuchen zu verstehen ... vielen dank!
Ähnliche Themen
-
<?ZP?> durch HTML Tag ersetzen
Von Transmitter im Forum XML TechnologienAntworten: 2Letzter Beitrag: 29.06.09, 08:45 -
Dead Links finden/URLs aus HTML-Dokument auslesen und überprüfen
Von socke2506 im Forum JavaAntworten: 4Letzter Beitrag: 23.03.09, 09:21 -
Regulärer Ausdrück: Ersetzen aller URLs innerhalb von HTML-Tags
Von Mamphil im Forum PHPAntworten: 2Letzter Beitrag: 13.11.06, 22:35 -
2 mal nach URLs parsen und ersetzen
Von phlux im Forum PHPAntworten: 6Letzter Beitrag: 09.03.05, 15:41 -
Alte Bildergalerie (Html) durch Templates ersetzen -> funktioniert leider nicht :(
Von shorty im Forum PHPAntworten: 3Letzter Beitrag: 02.01.04, 06:02





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren