Ankündigung

Einklappen
Keine Ankündigung bisher.

Link mit Anführungszeichen, Hochkommata, Gänsefußchen usw

Einklappen

Neue Werbung 2019

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

  • Link mit Anführungszeichen, Hochkommata, Gänsefußchen usw

    Hallo Community


    Ich habe dieses Problem.

    Ich habe z,B, einen fremden Link der geht ungefähr so: https://www.xywebseite.de/seite-"abc“

    Vor dem abc steht normales Hochkommata, nach dem abc stehen Gänsefüßchen

    Die wollte ich in eine Variabel abspeichern - $link - und anschließend in MySQL abspeichern

    Der Link lässt sich jedoch nicht in einem A Tag richtig ausgeben
    (übrigens solche Links kommen in meiner Linkluiste unter 1% vor - alle anderen normalen Links funktionieren genauso wie sie sollten)

    Wenn ich mit str_replace() rangehe, dann funktioniert der Link ja wieder nicht, da er verfälscht wurde
    $link = str_replace(""", "\'\'", $link);
    $link = str_replace("“", "\'\'", $link);

    Wie kann ich vorgehen, dass der Link, der in der Variabel & MySQL richtig abgespeichert wurde,
    das der auch bei der Ausgabe mit einem A Tag richtig ausgegeben wird

    mein A Teg sieht ungefähr so aus

    BEISPIEL
    PHP-Code:
    while($row $result->fetch_assoc()) {
    $out_body .= "<tr><td><a target='_blank' href="".$row["link"].""> Link</a></td></tr> ";




  • #2
    Hier wird halt wieder mal der Kontextwechsel nicht beachtet. Dauerthema hier im Forum.

    Werte, die in HTML-Code eingefügt werden, sollten immer mit htmlspecialchars() behandelt werden.

    $link enthält übrigens keine Link, sondern eine URL. Das sind zwei unterschiedliche Dinge.

    Kommentar


    • #3
      Ich mache das so dass ich generell immer mit Hochkomma arbeite

      PHP-Code:
      $html '<a href="test.php" target="_blank">'.$row['foo'].'</a>'
      aber noch besser ist es, eine Template engine zu nutzen bzw erst deine Variablen zusammen zu sammeln und zum SCHLUSS ausgeben

      in deinem Beispiel wäre es dann so:

      PHP-Code:
      while($row = $result->fetch_assoc()) {
      $links []=[
      'url'=>$row['link'],
      'title'=>$row['title']
      ];

      }  

      /.. später nach dem alle variablen gesammelt wurden ../

      ?>

      <?php foreach($links as $link):?>
      <tr><td><a target="_blank" href="<?=  htmlspecialchars($link['url'],ENT_QUOTES,'UTF-8')?>"> <?= htmlspecialchars($link['title'],ENT_QUOTES,'UTF-8'?></a></td></tr>
      <?php endforeach;?>
      übrigens habe ich ein Video erstellt wie du eine "Template Engine" (oder zumindestens einfach HTML von PHP Trennen kannst) der Link dazu ist hier https://www.youtube.com/watch?v=Hx83NJDzbj4
      apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

      Kommentar


      • #4
        Danke euch

        Ja der Kontextwechsel
        Ich habe auch noch ein Problem mit der Syntax - irgendwo in einer inkludierten Datei auf Zeile 273 ist meisten ein Simikolon zu viel oder zu wenig ^^

        Habe jetzt durch experementieren auch das hinbekommen <a target='_blank' href='".$row["link"]."'> ES LEBT ähm es funktioniert ))

        Die Variante von BlackScorp sieht sehr nteressant aus

        Kommentar


        • #5
          Hier fehlt aber htmlspecialchars().

          Kommentar


          • #6
            Zitat von hellbringer Beitrag anzeigen
            Hier fehlt aber htmlspecialchars().
            er fand meine Variante eben nur Interessant
            apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

            Kommentar


            • #7
              Zitat von dustinator Beitrag anzeigen
              Danke euch

              Ja der Kontextwechsel
              Ich habe auch noch ein Problem mit der Syntax - irgendwo in einer inkludierten Datei auf Zeile 273 ist meisten ein Simikolon zu viel oder zu wenig ^^

              Habe jetzt durch experementieren auch das hinbekommen <a target='_blank' href='".$row["link"]."'> ES LEBT ähm es funktioniert ))

              Die Variante von BlackScorp sieht sehr nteressant aus
              Dort hast du auch kein Escaping was durchaus eine Sicherheitslücke darstellen kann. Dir wurde htmlspecialchars ja bereits genannt, benutzte dies bitte auch.

              Kommentar


              • #8
                Zitat von BlackScorp Beitrag anzeigen

                er fand meine Variante eben nur Interessant
                Ich benutze das htmlspecialchars() auch für andere Input-Eingaben - aber für Links nutzte ich die noch nicht - kommt alles noch ))

                Kommentar


                • #9
                  Zitat von dustinator Beitrag anzeigen

                  Ich benutze das htmlspecialchars() auch für andere Input-Eingaben
                  Das ist falsch. htmlspecialchars() ist für die Ausgabe an HTML, sprich um den Kontextwechsel zu HTML hin korrekt zu behandeln. Mit "Eingabe" hat das absolut gar nichts am Hut.

                  Woher die Daten kommen (Formular, Datenbank, API, ...) ist auch egal. Wichtig ist das man diese je nach Kontextwechsel dann richtig behandelt.
                  Wenn Du diese zB in eine DB speicherst musst du anders escapen, als wenn du diese nach HTML ausgibtst. Uns so weiter.

                  In der Wissenssammlung gibt es einen Link zu einem schönen Betirag dazu: https://wiki.selfhtml.org/wiki/Progr...Kontextwechsel
                  The string "()()" is not palindrom but the String "())(" is.

                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar

                  Lädt...
                  X