tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
762
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von cameeel
    cameeel cameeel ist offline Mitglied Platin
    Registriert seit
    Dec 2004
    Beiträge
    677
    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
     
    Nein, ich bin nicht die Signatur, ich putz hier nur.

    URL's kürzen | Code's speichern

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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.
     

  3. #3
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Mein Vorschlag:
    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);

    ?>
    Ist zwar etwas umfangreicher jedoch auch präziser, so wird beispielsweise das Wort „http://-Prafix“ nicht als URL erkannt.
     
    Markus Wulftange

  4. #4
    Avatar von cameeel
    cameeel cameeel ist offline Mitglied Platin
    Registriert seit
    Dec 2004
    Beiträge
    677
    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
     
    Nein, ich bin nicht die Signatur, ich putz hier nur.

    URL's kürzen | Code's speichern

  5. #5
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    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

  6. #6
    Avatar von cameeel
    cameeel cameeel ist offline Mitglied Platin
    Registriert seit
    Dec 2004
    Beiträge
    677
    Danke, der erste Link hat sehr geholfen, jetzt kapier ichs glaub ein bissel, thx.


    cAm3eel
     
    Nein, ich bin nicht die Signatur, ich putz hier nur.

    URL's kürzen | Code's speichern

  7. #7
    Avatar von atcq
    atcq atcq ist offline Rookie
    Registriert seit
    Aug 2003
    Ort
    Ringschnait (BW)
    Beiträge
    6
    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:


    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_patternchr(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;
    }
    ... 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 ...

    angenommen der User schreibt zwei Adressen seiner Homepage in den string

    PHP-Code:
    $string "blabla meine website: http://www.atcq.de und meine website: http://www.atcq.de/wap" 
    dann bekomm ich das ergebnis:

    HTML-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
    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 in
    HTML-Code:
    <a href="http://www.atcq.de/wap">
    und in <a href="...">http://www.atcq.de/wap</a> ersetzt!

    hoffe das war einigermaßen verständlich ...

    hat jmd. ne Idee wie ich das verhindern kann?

    Grüße und schonmal Danke
     

  8. #8
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    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($url0floor($limit/2))) . '&#x2026;' htmlspecialchars(substr($urlceil($limit/2)*-1));
        } else {
            
    $return .= htmlspecialchars($url);
        }
        return 
    $return '</a>';

     
    Markus Wulftange

  9. #9
    Avatar von atcq
    atcq atcq ist offline Rookie
    Registriert seit
    Aug 2003
    Ort
    Ringschnait (BW)
    Beiträge
    6
    cool, das ging ja schnell ... ich werd es heut abend mal ausprobieren und versuchen zu verstehen ... vielen dank!
     

Ähnliche Themen

  1. <?ZP?> durch HTML Tag ersetzen
    Von Transmitter im Forum XML Technologien
    Antworten: 2
    Letzter Beitrag: 29.06.09, 08:45
  2. Antworten: 4
    Letzter Beitrag: 23.03.09, 09:21
  3. Antworten: 2
    Letzter Beitrag: 13.11.06, 22:35
  4. 2 mal nach URLs parsen und ersetzen
    Von phlux im Forum PHP
    Antworten: 6
    Letzter Beitrag: 09.03.05, 15:41
  5. Antworten: 3
    Letzter Beitrag: 02.01.04, 06:02