Kai W: Wie Sonderzeichen " in echo maskieren (class="bla")

Hallo,

ich versuche gerade eine breadcrumb-Navigation mit PHP einzubinden. diese soll im Kopf-Navigationsteil erscheinen und eine eigene css-class besitzen.

Ungefaehr so:

<p class="breadcrumb">Sie sind hier: <a href="index.php">Startseite</a></p>

leider klappt mein im Netz zusammengesuchter Versuch mit special characters ('"') nicht.

<?php
echo "<p class= '"'breadcrumb '"';> Sie sind hier:" .$breadcrumb->show_breadcrumb(). "</p>";
?>

Ich vermute mal das Ganze ist trivial fuer jemanden der  sich damit auskennt. Koennte mir jemand die Loesung wie man in der echo-Funktion Sonderzeichen maskiert kund tun ?

Vielen Dank!

Kai

  1. Hallo,

    <?php
    echo "<p class= '"'breadcrumb '"';> Sie sind hier:" .$breadcrumb->show_breadcrumb(). "</p>";
    ?>

    Ich vermute mal das Ganze ist trivial fuer jemanden der  sich damit auskennt. Koennte mir jemand die Loesung wie man in der echo-Funktion Sonderzeichen maskiert kund tun ?

    " wird mit \ maskiert. Beispiel:

    echo("<p class="big">Hallo Welt!</p>");

    Grüße aus Barsinghausen,
    Fabian

    1. hi,

      " wird mit \ maskiert. Beispiel:

      echo("<p class="big">Hallo Welt!</p>");

      daneben gibt es natürlich auch noch die möglichkeit, als string-begrenzer die einfachen hochkommata zu verwenden:

      echo '<p class="big">Hallo Welt!</p>';

      wobei hier dann natürlich wiederum im string selsbt auftauchende ' analog maskiert werden müssen.

      allerdings gilt zu beachten, dass innerhalb von '...' nicht auf variablennamen geparst wird, hier muss man den string also zunächst auftrennen, wenn man eine variable einsetzen will - was aber im allgemeinen auch bei doppelten anführungszeichen der sauberere weg ist.

      gruss,
      wahsaga

      1. Hallo,

        daneben gibt es natürlich auch noch die möglichkeit, als string-begrenzer die einfachen hochkommata zu verwenden:

        echo '<p class="big">Hallo Welt!</p>';

        Oder auch die Heredoc-Syntax:
        echo <<<STR
        <p class="big">Hallo Welt!</p>
        STR;

        Da sei anzumerken, dass er nichts maskieren muss, und auch die Variablen geparst werden.

        gruß,
        Severin

        --
        Realität ist das, was nicht verschwindet, wenn man aufhört, daran zu glauben.
        --Philip K. Dick
  2. Hallo,

    besten dank fuer das fixe feedback :-)

    Hier meine Ergebnisse mit dem Versuch der Umsetzung euerer Loesungsansaetze. Leider noch kein Durchbruch, aber ich denke mal das liegt an einem syntaktischen Fehler meinerseits.

    Fabians Loesung:

    echo("<p class="breadcrumb">Sie sind hier: .$breadcrumb->show_breadcrumb().</p>");
    ?>

    erzeugt folgende, korrekt nach class formatierte, Ausgabe im Browser:

    Sie sind hier: .().

    Ausgegebener Quellcode:

    <p class="breadcrumb">Sie sind hier: .().</p>

    Wahsagas Loesung:
    habe ich nicht probiert, da mein Kenntnisstand zu gering ist, um das anhand der Beschreibung selber zu loesen.

    Severins Loesung:

    echo <<<STR <p class="breadcrumb"> Sie sind hier:" .$breadcrumb->show_breadcrumb(). "</p>" STR;
    ?>

    erzeugt fehler

    parse error: parse error, unexpected T_SL, expecting ',' or ';' in /home/www/[...]

    Koenntet ihr mich auf meinen Umsetzungsfehler hinweisen ?

    Besten dank

    Kai

    1. Hallo,

      erzeugt folgende, korrekt nach class formatierte, Ausgabe im Browser:

      Sie sind hier: .().

      Der Fehler liegt bei der Methode $breadcrumb->show_breadcrumb(). Ohne dass du sie postest, kann dir nicht geholfen werden.

      Severins Loesung:

      echo <<<STR <p class="breadcrumb"> Sie sind hier:" .$breadcrumb->show_breadcrumb(). "</p>" STR;
      ?>
      erzeugt fehler
      parse error: parse error, unexpected T_SL, expecting ',' or ';' in /home/www/[...]
      Koenntet ihr mich auf meinen Umsetzungsfehler hinweisen ?

      Ja, verstehe was du zu tun versuchst und lies den Manual-Eintrag (http://at2.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc).

      Da steht klipp und klar, dass der Begrenzer eines Heredoc-Strings am Anfang einer _neuen_ Zeile, als _erstes_ Zeichen dieser Zeile vorzukommen hat.

      gruß,
      Severin

      --
      Realität ist das, was nicht verschwindet, wenn man aufhört, daran zu glauben.
      --Philip K. Dick