Bastian: Die verflixten Apostrophe!

Ich habe eine Frage, die in Zusammenhang mit PHP und MySQL häufig auftaucht, aber ich bisher nie wirklich begriffen habe.

Ich habe eine MySQL-Datenbanktabelle mit Namen. Einige davon enthalten einen Apostroph, z.B. O'Hara.

Solange ich den Inhalt der Namensspalte mit PHP bloss ausgeben will, klappt das auch ganz gut:

echo $row["name"];

Wenn ich aber den Inhalt in einer URL übergeben will, gibt's Probleme:

echo "<a href='person.php?name=" . $row["name"] . "'>Linktext</a>";

Dann nämlich schliesst der Apostroph des Namens O'Hara fälschlicherweise das href-Attribut ab, womit der String name dann bloss "O" lautet.

Wer kann mir helfen, wie ich dieses Problem lösen kann? Ich bin euch sehr dankbar!

Gruss
Bastian

  1. Hallo Bastian,

    es gibt folgende Möglichkeiten:
    1. nutze htmlentities($row["name"]), damit erhälst du  O&apos;Hara.
    2. nutze urlencode($row["name"]), damit erhälst du  O%27Hara
    Ich würde (2.) nehmen, da das Apostroph in URLs eigentlich ein unerlaubtes Zeichen ist, was kodiert werden sollte (mit (1.) hast du es nur für HTML kodiert).

    MfG Benjamin

    1. Hallo Benjamin,

      1. nutze htmlentities($row["name"]), damit erhälst du  O&apos;Hara.
      2. nutze urlencode($row["name"]), damit erhälst du  O%27Hara

      3. verwende " als Begrenzer für html-Attribute (dann natürlich ' als Stringbegrenzer in PHP)

      Grüße aus Nürnberg
      Tobias [der auch 2. empfehlen würde]

      --
      Softwaretipp: TV-Browser
      1. Moin!

        Tobias [der auch 2. empfehlen würde]

        Das ist auch das einzige, was hier wirklich richtig ist.

        1. Ist falsch- Das Zeichn ist in einer URI nicht zulässig. Daran ändert auch die Tatsache der Maskierung dem Browser gegenüber nichts.
        2. Ist richtig.
        3. Ist bei Verwendung von 2) unnötig und völlig uneinbringlich.

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
    2. Vielen Dank! Jetzt funktioniert's endlich! :-)

    3. Hi,

      es gibt folgende Möglichkeiten:

      1. nutze htmlentities($row["name"]), damit erhälst du  O&apos;Hara.

      was aber kein gültiges HTML ist (bei XHTML sieht es anders aus, dort ist apos definiert - weil es in XML definiert ist; bei HTML ist apos nicht definiert).

      In einer URL ist aber ' sowieso nicht erlaubt, weswegen

      1. nutze urlencode($row["name"]), damit erhälst du  O%27Hara

      in diesem Fall vorzuziehen wäre. Bei Attributen, die keine URL enthalten, wäre für HTML &#x27; bzw. &#39;, für XHTML ersatzweise auch &apos; das richtige.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Schreinerei Waechter
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.