Begriffe und Phrasen in einem Text verlinken

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Begriffe und Phrasen in einem Text verlinken

    beim stöbern auf der unten verlinkten seite bin ich über ein php snippet gestossen das ich für meine zwecke sehr gut gebrauchen kann.
    es handelt sich um folgendes code stück

    http://simplecontent.net/phpsnippets/5/link_words.html

    auf der seite funktioniert die demo sehr gut, aber sobald ich den code auf meiner xampp
    installation unter windows xp ausfüre bekomme ich folgendes resultat.


    das sehe ich im firefox browser:

    quelltextansicht:
    ------------------------------
    Aus einem kann man herstellen.
    Z.B. Essstäbchen, , Schrankwände oder Fensterrahmen.
    Möchte man aber damit tun kann man
    aber auch eine daraus bauen.
    oder , da fällt die Entscheidung doch leicht, oder?
    Immer noch besser als .
    <img src="/gfx/gitarre.jpg" alt="Gitarre" title="Gitarre aus einem Urwaldbaum, um ein Haar wäre aus dem Holz Klopapier geworden.">
    -------------------------------

    wie ihr sehen könnt sollte das script die phrasen die im array definiert sind mit der angegebenen url verlinken.
    beim ausführen des scripts "fehlen" diese links/phrasen im text. woran kann das liegen.

    script getestet auf:
    windows xp xammp
    debian linux, apache, php4




    es wäre sehr nett von euch wenn sich jemand ein paar minuten zeit für mein problem nehmen würden.

    naturlich habe ich vor diesem post zuerst den webmaster dieser seite um hilfe gebeten, leider nach einer woche keine antwort ..


    und hier der php code

    PHP-Code:
    <?php


    function cmp($a,$b)
    {
        
    $bool strlen($a) < strlen($b);
        return 
    $bool;
    }


    function 
    gimmeTheLink($k, &$map)
    {
        
    $r '';
        if (isset(
    $map[$k])){
            
    $r $map[$k];
            unset(
    $map[$k]);
        }else{
            
    $r $k;
        }
        return 
    $r;
    }

    $text = <<< EOT

    Aus einem Urwaldbaum kann man viel unnützes Zeug herstellen.
    Z.B. Essstäbchen, Klopapier, Schrankwände oder Fensterrahmen.
    Möchte man aber etwas wirklich sinnvolles damit tun kann man 
    aber auch eine Gitarre daraus bauen.
    Gitarre oder Urwaldbaum, da fällt die Entscheidung doch leicht, oder?
    Immer noch besser als Klopapier.
    <img src="/gfx/gitarre.jpg" alt="Gitarre" title="Gitarre aus einem Urwaldbaum, 
    um ein Haar wäre aus dem Holz Klopapier geworden.">
    EOT;

    $targets = array(
    'Urwaldbaum' => 'http://de.wikipedia.org/wiki/Urwald',
    'Klopapier' => 'http://www.umwelt.org/robin-wood/german/trowa/urwaldpapier/index.htm',
    'Gitarre' => 'http://de.wikipedia.org/wiki/Gitarre',
    'viel' => 'http://www.pril.de',
    'Zeug' => 'http://www.zeug.de',
    'viel unnützes Zeug' => 'http://www.ebay.de',
    'etwas wirklich sinnvolles' => 'http://www.internetabschalten.de',

    );

    $map = array();

    foreach (
    $targets as $k => $v){
        
    $key2use preg_quote($k);
        
    $map[$key2use] = sprintf('<a href="%s">%s</a>'$v$k);
    }


     
    uksort($map'cmp');

    $tmp '(\b'.join ('\b|\b'array_keys($map)).'\b)';

    $regexp "/".$tmp."(?![^<]+>)/e";


    $new preg_replace($regexp,'gimmeTheLink("", $map)',$text);

    echo 
    $new;

    ?>

    p.s
    Welche überbreite, auf meinem 22" display sieht alles wunderbar aus ;-)

    mit freundliche grüssen


    -fhsd-
    Zuletzt geändert von fhsd; 28.05.2007, 12:41.

  • #2
    http://www.php-resource.de/forum/sho...threadid=50454

    Bitte ERST lesen und befolgen. Wenn Überbreite weg ist und keine Fehler mehr auftauchen bitte das Problem erneut beschreiben.

    Kommentar


    • #3
      Re: Begriffe und Phrasen in einem Text verlinken

      Original geschrieben von fhsd
      PHP-Code:
      $new preg_replace($regexp,'gimmeTheLink("", $map)',$text); 
      warum wendest du dich nicht an den autor, wenn du dich schon blind auf irgendwas verlässt, was du vielleicht nicht verstehst?

      der autor hat offensichtlich einen fehler gemacht, indem er den ersten parameter für gimmeTheLink() nicht gesetzt hat. dieser soll wohl eine referenz darauf sein, was der reguläre ausdruck gefunden hat. im manual findest du, wie man diese wieder einbaut.

      Kommentar


      • #4
        Re: Re: Begriffe und Phrasen in einem Text verlinken

        Original geschrieben von penizillin
        warum wendest du dich nicht an den autor, wenn du dich schon blind auf irgendwas verlässt, was du vielleicht nicht verstehst?

        Original geschrieben von fhsd
        naturlich habe ich vor diesem post zuerst den webmaster dieser seite um hilfe gebeten, leider nach einer woche keine antwort ..
        der webmaster ist der autor ...


        nun, wie soll ich sagen. meine php kentnisse sind momentan nicht sehr hoch darum bitte ich das forum mir bei diesem script zu helfen. du hast mir schon einen hinweis gegeben wo der fehler liegt, ich werde versuchen den bug selbst zu beheben, aber ich bezweifle das ich das ohne hilfe von euch schaffe ...

        mfg

        Kommentar


        • #5
          hallo,

          kann mir jemand etwas genauer beschreiben wo das problem ist.

          ich komme nicht weiter

          Kommentar


          • #6
            wo befindet sich der aufruf der funktion gimmeTheLink? welches parameter wird ihr als erstes übergeben?

            Kommentar


            • #7
              habe das so abgeändert

              PHP-Code:

              function gimmeTheLink($k, &$map)
              {
                  
              $r '$targets';
                  if (isset(
              $map[$k])){
                      
              $r $map[$k];
                      unset(
              $map[$k]);
                  }else{
                      
              $r $k;
                  }
                  return 
              $r;

              nun werden die phrasen zwar im text angezeigt aber nicht verlinkt.
              wie man sieht bin ich kein php genie

              Kommentar


              • #8
                hättest du etwas dagegen, meine frage zu beantworten? oder lieber wild rumraten?

                Kommentar


                • #9
                  hallo,

                  fühl dich bitte nicht beleidigt, die situation sieht so aus.
                  für meine private internetseite ist die funktion dieses scripts sehr von interresse. das script macht die texte zum glossar ...

                  da ich noch nicht sehr viel mit php gearbeitet habe begab ich mich auf die suche nach einem "fertigem" script das meine bedürfnisse einigermassen entspricht.
                  habe auch eins gefunden aber leider funktioniert es nicht ...

                  da ich noch kein php spreche erhoffte ich mir das sich jemand in diesem forum ein paar minuten zeit nimmt um sich den code aniseht und ihn korrigiert.


                  ... im manual findest du, wie man diese wieder einbaut.
                  diese mentalität ist mir aus der linux/unix welt bekannt hier wurde man(n) als newbie genauso behandelt, sprich man wurde gezwungen sich das wissen anzuarbeiten.
                  und jetzt nach ein paar jahren ist die shell mein freund geworden...

                  mir fehlt es noch an wissen um das script zu debuggen, und ich kann php nicht in 24 stunden lernen um das selbst in die hand zu nehmen.

                  falls mir jemand helfen möchte, der soll einfach posten. danke

                  mfg fhsd

                  Kommentar


                  • #10
                    PHP-Code:
                    <?php
                    $text 
                    = <<< EOT

                    Aus einem Urwaldbaum kann man viel unnützes Zeug herstellen.
                    Z.B. Essstäbchen, Klopapier, Schrankwände oder Fensterrahmen.
                    Möchte man aber etwas wirklich sinnvolles damit tun kann man 
                    aber auch eine Gitarre daraus bauen.
                    Gitarre oder Urwaldbaum, da fällt die Entscheidung doch leicht, oder?
                    Immer noch besser als Klopapier.
                    <img src="/gfx/gitarre.jpg" alt="Gitarre" title="Gitarre aus einem Urwaldbaum, 
                    um ein Haar wäre aus dem Holz Klopapier geworden.">
                    EOT;

                    $targets = array(
                    'Urwaldbaum' => 'http://de.wikipedia.org/wiki/Urwald',
                    'Klopapier' => 'http://www.umwelt.org/robin-wood/german/trowa/urwaldpapier/index.htm',
                    'Gitarre' => 'http://de.wikipedia.org/wiki/Gitarre',
                    'viel' => 'http://www.pril.de',
                    'Zeug' => 'http://www.zeug.de',
                    'viel unnützes Zeug' => 'http://www.ebay.de',
                    'etwas wirklich sinnvolles' => 'http://www.internetabschalten.de',

                    );

                    $links = array();

                    foreach (
                    $targets as $k => $v){
                        
                    $links[$k] = sprintf('<a href="%s">%s</a>'$v$k);
                    }

                    $new str_replace(array_keys($links), $links$text);

                    echo 
                    $new;
                    ?>
                    Versuch mal das. Mit der Gitarre haut das logischerweise nicht hin, weil der alt-Tag im image ersetzt wird.
                    ich glaube

                    Kommentar


                    • #11
                      Ahoi,

                      hier schreibt der Urheber des Skriptbeispieles.
                      Nur für den Fall das hier noch jemand mitliest.
                      Ich habe den Fehler jetzt beseitigt.
                      Es lag daran, dass die Zeichenfolge "Backslash 1" für die back reference bei der Ausgabe verloren ging.
                      Bei der Ausführung des Skriptes war es noch ok, deshalb hat es auf meiner Seite funktioniert.

                      Die vorletzte Zeile muss also

                      $new = preg_replace($regexp,'gimmeTheLink("\1", $map)',$text);

                      lauten und nicht

                      $new = preg_replace($regexp,'gimmeTheLink("", $map)',$text);


                      Hier die URL zu der korrigierten Version:

                      http://simplecontent.net/phpsnippets/5/link_words.html


                      Viele Grüße

                      Stefan

                      Kommentar

                      Lädt...
                      X