Suchen/Ersetzen

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

  • Suchen/Ersetzen

    hallo @ all.

    Ich habe in einer Datenbank einige Beschreibungen.

    z.B.
    Aquamarit, Amazonit, Aventurin-Quarz, Quarz

    Nun habe ich einen Text/String den ich Durch suchen will.

    u.A. ist da Aventurin-Quarz drin. Leider verlinkt er nun nach Quarz, obwohl auch Aventurin-Quarz in der Datenbank als wort ist.

    Wie kann ich das verhindern?

    Mein Script z.Zt.
    Function
    PHP-Code:
    function replace_link_wissenswertes($text)
    {
      
    $wert NULL$a 0;
      
    $sel "SELECT w_begriff FROM wissenswertes ";
      
    $sql mysql_query($sel); $a=0;
      while ( 
    $ds mysql_fetch_object ($sql) )
      {
        
    $wert[$a][0] = $ds->w_begriff;
        
    $wert[$a][1] = strlen($wert[$a][0]);
        
    $a++;
      }

      foreach(
    $wert as $wert)
      {
        
    $text str_replace($wert[0], "<a href='wissenswertes.php#".$wert[0]."'>".$wert[0]."</a>"$text);
        
    $text str_replace("<a name='<a href='wissenswertes.php#".$wert[0]."'>".$wert[0]."</a>'></a>""<a name='".$wert[0]."'></a>"$text);
        
    $text str_replace("<a href='wissenswertes.php#".$wert[0]."'>".$wert[0]."</a>'""'"$text);
      }
      return(
    $text);

    Hat jem. ne Anregung! Danke.
    Beachte: Dumm ist, wer Dummes tut.

  • #2
    Hallo,

    wie sieht denn die Datenbank-Struktur aus? Wie soll das Ergebnis aussehen (Beispiel)? Wie sieht das Ergebnis aus (echo($text))? Was machen die ganzen Ersetzungen für einen Sinn? Kannst du dazu mal bitte die Intention erläutern?

    Gruß,

    Amica
    Zuletzt geändert von AmicaNoctis; 20.09.2009, 16:31.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Sinn und Zweck.

      Also Datenbank

      w_id
      w_begriff (Begriff)
      w_erklaerung (Erklärung)

      So ich habe einen Text. z.B. über Mineralien. Da habe ich dann das Wort z.B.
      Aventurin-Quarz benutzt. und auch Quarz allein.

      Nun soll automatisch ein Link zu den Erklärungen (Wissenswertes.php#Quarz oder eben Wissenswertes.php#Aventurin-Quarz.
      Beachte: Dumm ist, wer Dummes tut.

      Kommentar


      • #4
        Ok, Fragen 1, 4 und 5 erledigt, 2 und 3 noch offen.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Es soll so sein, dass z.b. Aventurin-Quarz verlinkt wird. Aktuell wird nur Quarz verlinkt.

          Die verlinkung is richtig. Sieht auch gut aus. Nur eben Quarz. Aber er soll anstatt Quarz ja den Aventurin-Quarz verlinken.
          Beachte: Dumm ist, wer Dummes tut.

          Kommentar


          • #6
            Das weiß ich ja nun schon. Ich weiß auch bereits, wo dein Fehler liegt und will dich durch die Nachfragen dazu bringen, dich selbst damit auseinanderzusetzen. Daher wollte ich $text wissen, damit du dir den selbst mal anguckst und zwar nach jedem Ersetzungsschritt. Dann siehst du was mit dem Aventurin-Quarz passiert.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Danke. Ich luscher mal.
              Beachte: Dumm ist, wer Dummes tut.

              Kommentar


              • #8
                OffTopic:
                was ist denn "luschern"?
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  na sowas wie nachschauen. überdenken. usw.

                  kennste das nicht, um die Ecke Luschern, Spähen.
                  Beachte: Dumm ist, wer Dummes tut.

                  Kommentar


                  • #10
                    Hmm... das muss ich noch mal in eine Andere Php datei packen. ich find grad keen unterschied.
                    außer wenn ich

                    [PHP] asort($wert,SORT_NUMERIC);[PHP]
                    vor der foreach schleife eingebe. nur dann teilt er Aventurin-Quarz in
                    Aventurin- und Quarz.

                    ich schau mal weiter.
                    Beachte: Dumm ist, wer Dummes tut.

                    Kommentar


                    • #11
                      So nun habe ich mal geschaut.

                      es hat mit

                      PHP-Code:
                      $text str_replace("<a href='wissenswertes.php#".$wert[0]."'>".$wert[0]."</a>'""'"$text); 
                      zu tun. mit dieser Zeile will ich aber verhindern, dass <a name='Quarz'></a> verlinkt wird, weil eig. diese Zeile nich sichtbar ist. aber durch diese Zeile dann wird.

                      verstehst du?
                      Beachte: Dumm ist, wer Dummes tut.

                      Kommentar


                      • #12
                        Das liegt an den Ersetzungsausdrücken. Du ersetzt zuerst in einem Text alle Vorkommen von Aventurin-Quarz durch einen Link mit diesem Wort drin. Wenn du dann aber alle Vorkommen von Quarz ersetzt, machst du dir die Links von vorher damit kaputt und erzeugst ungültigen HTML-Code. Was der Browser dann damit macht ist nicht definiert, aber in deinem Falle zeigt er nur das innere a-Element als Link. Dieser falsche "HTML"-Code müsste bei dir rauskommen und das ist dein Problem an den Ersetzungen:

                        HTML-Code:
                        <a href='wissenswertes.php#Aventurin-'>Aventurin-<a href='wissenswertes.php#Quartz'>Quartz</a></a>
                        Kann das sein?

                        Gruß,

                        Amica
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Kommentar


                        • #13
                          Ja genau. Das ist das Problem.

                          Nur steh ich grad auf'm schlauch, wie ich das abfangen kann...
                          Beachte: Dumm ist, wer Dummes tut.

                          Kommentar


                          • #14
                            Dafür brauchst du preg_replace statt str_replace, aber dennoch ist es relativ kompliziert und du musst erstmal alle Begriffe der Länge nach absteigend sortieren und zusätzliche Marker (ich würde z. B. Steuerzeichen nehmen) verwenden, um die bereits verlinkten Begriffe vor erneuter Ersetzung zu schützen. Ganz am Ende werden dann die Marker einfach wieder gelöscht.

                            Sicherer und besser wäre es mit DOM-Manipulation, aber das macht die Sache auch nicht einfacher.
                            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                            Super, danke!
                            [/COLOR]

                            Kommentar


                            • #15
                              die länge der begriffe habe ich ja schon unter

                              $wert[ARRAY_NR][1] gespeichert.

                              sortieren kann ich ja per sort().

                              zu preg_replace(), das ist mir noch etwas kompliziert, da ich die logik nicht zu 100% verstehe. mit diesen Zeichen usw.

                              Was meinst du mit Steuerzeichen? vllt. könntest du mir helfen , beim entwickeln.
                              Beachte: Dumm ist, wer Dummes tut.

                              Kommentar

                              Lädt...
                              X