selfhtml.de - Alles für den Webmaster!

 

Empfehlung:

wix.com

Kostenlose Homepage

Besuchen Sie auch:

Jobs:

Doppelt verschachtelte Anführungszeichen

Autor: Manya
Datum: 03.07.2013 21:22:50

Guten Abend,

Ich habe wiedermal Probleme mit den Anführungszeichen in PHP. :-(

Vorweg: Ich habe mir meinen vergangenen themengleichen Thread nochmal angeschaut, aber der hat mir nicht weitergeholfen, denn diesmal sind es doppelt verschachtelte Anführungszeichen.

Diese Anweisung
onMouseOver="document.getElementById('content').style.backgroundColor = '#69f'"
möchte ich in php mit "echo" ausgeben, wobei der Farbwert noch aus einer Variablen kommt.

Kann mir bitte jemand helfen?

Gruß,
Manya


Hier ist meine Testdatei mit meinen diversen Versuchen:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>

<HEAD>
<TITLE> echo</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<style type="text/css">

body {
    font-size: 100%;
    line-height: 1.3em;
    font-family: arial,sans-serif;
    }

ul {
    margin: 0;
    padding: 0;
    list-style: none;
}



#wrapper {
    position: relative;
    width: 57em;
    min-width: 530px;
    max-width: 98%;
    margin: auto;
    font-size: 0.9em;
    border: 4px dotted #000;
    }





#content {
    position: relative;
    min-height:600px;
    margin-top: 10px;
    margin: 10px 7% 0px;
    padding: 0px 40px;
    color: #333;
    background-color: #FFF;
    border: 2px dotted #f00;
    }


ul {
   padding: 0;
   margin: 0;
   list-style-type:  none;
   }

ul.farb {
   position: relative; /* fuer IE6 */
   position: fixed;
   top: 3px;
   right: 20px;
   text-align: center;
   width: 47em;
   font-weight: bold;
   margin: 0px 0 0 1.1em;
   z-index: 10;
   color: #000;
   background-color: #ff0;
  border: 3px solid;
   }



ul:first-child  {
   height: 1.8em;
}



ul.farb li ul li {
   position: relative;
   float: left;
   width: 99%;
   height: 1.8em;
   }

ul.farb li ul li a  {
   display: block;
   height: 1.8em;
   line-height: 1.8em;
   width: 99%;     /* Hack fuer IE6 */
   display: inline-block;   /* Hack fuer IE6 */
   text-decoration: none;
   margin-right: 2px;
   color: black;
   text-align: center;
   border: 1px solid black;
   }

li:hover a,
li a:hover {
    zoom: 1;
   }


ul.farb li ul {
   display: none;
   position: absolute;
   top: 0;
   left: 0;
   white-space: normal;   }

ul.farb li:hover ul,
ul.farb li a:hover ul {
   display: block;
   width: 99%;
   }

ul.farb li ul li  {
   float: left;
   width: 7.5em;
      }

ul.farb li:hover ul li ul  {
   display: none;
   position: absolute;
   top: 1.8em;
   left: 0;
   color: #000; }

ul.farb li ul li:hover ul,
ul.farb li ul li a:hover ul,
ul.farb li ul li ul li a:hover   {
   display: block;
   color: #000 ! important;  }

ul.farb li ul li ul li a  {
   text-transform: uppercase;
   letter-spacing: 0.15em;
   }




</style>
</HEAD>

<BODY>





<?php
    $feld_1 = "#69f";
    $feld_2 = "#c69";
    $feld_3 = "#ff0";
?>


<div id="wrapper">

<!-- onMouseOver="document.getElementById('content').style.backgroundColor = '#69f'"    -->


<ul class="farb">
    <li><a href="#">Hover</a>
        <ul>
            <li><a href="#">gelb</a>
                <ul>

      <?php
      echo "   <li style='background-color: $feld_1'>n";
      echo "      <A href='#'n";
   //   echo '         onMouseOver="document.getElementById('content').style.backgroundColor='$feld_1'" . "n";
      echo "         style='color: $feld_1'> $feld_1 </a></li>nn";
      ?>


      <?php
      echo "   <li style='background-color: $feld_2'>n";
      echo "      <A href='#'n";
      echo "         onMouseOver='document.getElementById('content').style.backgroundColor="$feld_2"'n";
      echo "         style='color: $feld_2'> $feld_2 </a></li>nn";
      ?>



      <?php
      echo "   <li style='background-color: $feld_3'>n";
      echo "      <A href='#'n";
      echo "         onMouseOver='document.getElementById('content').style.backgroundColor=" . $feld_3 . "n";
      echo "         style='color: $feld_3'> $feld_3 </a></li>nn";
      ?>
                </ul>
            </li>
        </ul>
    </li>
</ul>






<div style="clear: both;"></div>


<div id="content"> <br>  </div>






</div>

</BODY>
</HTML>



Re: Doppelt verschachtelte Anführungszeichen

Autor: FelixF
Datum: 04.07.2013 01:37:34

Eine wunderschöne Nacht :)

So rein aus dem Bauch raus würde ich es damit versuchen:

<?php

$color = '#abcdef';
echo 'onMouseOver="document.getElementById('content').style.backgroundColor = ''.$color.'' "';

?>

Wenn du doppelte Anführungszeichen hast, musst du daran denken, dass du sie teilweise escapen musst.
Ich hoffe, ich habe ihr so zu später Stunde kein Mist zusammengeschrieben :)

Felix



Re: Doppelt verschachtelte Anführungszeichen

Autor: FelixF
Datum: 04.07.2013 01:40:28

<?php

$color = '#abcdef';
echo 'onMouseOver="document.getElementById(\'content\').style.backgroundColor = \' '.$color.' \' " ';

?>

Jetzt sollten auch die Backslashes da sein.



Re: Doppelt verschachtelte Anführungszeichen

Autor: Manya
Datum: 04.07.2013 04:16:33

Hallo Felix,

> Eine wunderschöne Nacht :)

Nach diesem verregneten Tag sollte die Nacht wenigsten gut werden, aber der Fernseher hat mich plötzlich aus dem Schlaf gerissen, und so bin ich wieder hier gelandet. ;-)

> Wenn du doppelte Anführungszeichen hast, musst du
> daran denken, dass du sie teilweise escapen
> musst.

Das habe ich gemacht, aber anscheinend nicht richtig und nicht vollständig.
Erst jetzt sehe ich, dass die im Quellcode in meinem ersten Posting gar nicht mehr enthalten sind.
Der Backslash vor dem "n" für den Zeilenumbruch steht auch nicht mehr da, obwohl ich den Code genauso hier 'reingepostet habe, wie er in meinem Editor steht. :-/

> Ich hoffe, ich habe ihr so zu später Stunde kein
> Mist zusammengeschrieben :)

Das hast Du nicht, wenn man von dem Tippfehler absieht. :-D

Tausend Dank für Deine Hilfe, es funktioniert!  :-)  :-)  :-)

Eine wunderschöne Nacht kann ich jetzt nicht mehr wünschen, denn wenn Du das liest, ist die Nacht ja vorbei, aber ersatzweise einen wunderschönen Guten Morgen!  :-)

Gruß,
Manya



Re: Doppelt verschachtelte Anführungszeichen

Autor: T.Jung
Datum: 04.07.2013 12:49:39

Auch wenn Du schon eine funktionierende Lösung gefunden hast:

> denn diesmal
> sind es doppelt verschachtelte
> Anführungszeichen.

Es ist _immer_ am besten, _nur_ das per »echo« ausgeben zu lassen, was in PHP geschrieben sein _muss_.
Also nicht so:

> <?php
> echo "   <li style='background-color: $feld_1'>\n";
> echo "      <A href='#'";
> echo ' onMouseOver="document.getElementById('content').style.backgroundColor='$feld_1'"
> . "\n";
> (...)

Sondern so:

    <li style="background-color:<?php echo $feld_1; ?>">
    <a href="#"
    onMouseOver="document.getElementById('content').style.backgroundColor='<?php
    echo $feld_1; ?>'"><?php echo $feld_1; ?></a>
    </li>


Unter anderem vermeidest Du so genau die Probleme mit den verschachtelten Anführungszeichen.

Gruß,
Tobias Jung



Re: Doppelt verschachtelte Anführungszeichen

Autor: FelixF
Datum: 04.07.2013 15:41:15

Das ist gut zu wissen.
Gibt es dafür einen bestimmten Grund, außer das man damit weniger Probleme mit den Anführungszeichen hat?

Felix



Re: Doppelt verschachtelte Anführungszeichen

Autor: Manya
Datum: 04.07.2013 17:09:47

Hallo Tobias,

> Es ist _immer_ am besten, _nur_ das per »echo«
> ausgeben zu lassen, was in PHP geschrieben sein _muss_.

Das ist wirklich einfacher. :-)
Wenn ich überlege, wieviel Zeit ich mit diesen verflixten verschachtelten Anführungszeichen verplempert habe,  ...

Andererseits habe ich mal irgendwo gelesen, dass häufiges script-auf und script-zu die Performance erheblich beeinträchtigen soll.
Ob die Quelle aber nun kompetent war, kann ich nicht beurteilen.

Bei mir sind es nun nicht nur 3 solcher Listeinträge

<li style="background-color:#f4f4ea">
    <a href="#"
       onMouseOver="document.getElementById('content').style.backgroundColor='#f4f4ea'"
       style='color: #f4f4ea'> #f4f4ea </a></li>

sondern 25, die in einer Schleife abgearbeitet werden:

<ul>
    <?php
        foreach ($arr_gelb as $feld)
      {
    ?>
      <li style="background-color:<?php echo $feld; ?>">
          <a href="#"
             onMouseOver="document.getElementById('content').style.backgroundColor='<?php echo $feld; ?>'"
             style='color: <?php  echo "$feld'> $feld </a></li>n";  
      }  
    ?>

</ul>

Das sind dann 4 mal 25 = 100 Script-Aufrufe.

Von diesen Listen habe ich dann noch weitere 4 - 5 in der php-Datei.
Das wären also zusammen 400 -500 Script-Aufrufe.

Wird dabei nicht der Seitenaufbau wahnsinnig langsam?
Wenn ich aber auf der anderen Seite die Zeit gegenrechne, die ich brauche, um mit den doppelt verschachtelten Anführungszeichen klarzukommen, wenn ich alles in _ein_ Script schreibe, dann würde ich natürlich Deine vorgeschlagene Methode bevorzugen.
Zeit ist schließlich Geld. ;-)


Gruß,
Manya



Re: Doppelt verschachtelte Anführungszeichen

Autor: T.Jung
Datum: 04.07.2013 18:17:24

> Andererseits habe ich mal irgendwo gelesen, dass
> häufiges script-auf und script-zu die Performance
> erheblich beeinträchtigen soll.
> Ob die Quelle aber nun kompetent war, kann ich
> nicht beurteilen.
> (...)
> Das sind dann 4 mal 25 = 100 Script-Aufrufe.
>
> Von diesen Listen habe ich dann noch weitere 4 -
> 5 in der php-Datei.
> Das wären also zusammen 400 -500 Script-Aufrufe.
>
> Wird dabei nicht der Seitenaufbau wahnsinnig
> langsam?

Nein, das Gegenteil ist der Fall.
Die Begründung habe ich schon mal vor ein paar Jahren geliefert:
http://www.selfhtml.de/forum/zeigebeitrag_1_120600_120591_1078.php

Die Empfehlung, lieber ein häufiges »PHP-auf-PHP-zu« zu verwenden, findet sich sogar im PHP-Manual:
http://php.net/manual/de/language.basic-syntax.phpmode.php
| ... aber für die Ausgabe von großen Textblöcken ist der
| Ausstieg aus dem Parse-Modus generell effizienter, als
| den gesamten Text durch echo oder print zu jagen.


> Wenn ich aber auf der anderen Seite die Zeit
> gegenrechne, die ich brauche, um mit den doppelt
> verschachtelten Anführungszeichen klarzukommen,
> wenn ich alles in _ein_ Script schreibe, dann
> würde ich natürlich Deine vorgeschlagene Methode
> bevorzugen.

Das kommt noch hinzu. ;-)

Ein weiterer Grund ist, dass dieser Code einfach »sauberer« ist: Man lässt nur das vom PHP-Parser behandeln, was auch wirklich PHP ist. Vorteil für Dich als Entwickler ist zudem, dass viele Editoren den Code innerhalb von echo/print nicht mit HTML-Syntaxeinfärbung behandeln, sondern einfarbig als »auszugebender String«: Fehler in der HTML-Syntax sind somit nicht so einfach aufzuspüren.
Zugegebenmaßen ist das natürlich vom jeweiligen Entwicklungswerkzeug abhängig und man könnte auch sagen: »Wenn das Dein Editor nicht kann, such Dir halt einen, der es kann...«

Aber ich für meinen Teil werde mein favorisiertes Werkzeug sicher nicht wechseln wegen eines Problem, dass ich nicht hätte, wenn ich von vorneherein sauberen Code geschrieben hätte. ;-)

Gruß,
Tobias



Re: Doppelt verschachtelte Anführungszeichen

Autor: T.Jung
Datum: 04.07.2013 18:18:22

> Das ist gut zu wissen.
> Gibt es dafür einen bestimmten Grund, außer das
> man damit weniger Probleme mit den
> Anführungszeichen hat?

Da Manya mehr oder weniger das gleiche gefragt hat: Siehe meine Antwort dort. :-)

Gruß,
Tobias



Re: Doppelt verschachtelte Anführungszeichen

Autor: Manya
Datum: 05.07.2013 01:19:34

>http://www.selfhtml.de/forum/zeigebeitrag_1_120600_120591_1078.php
>
> Die Empfehlung, lieber ein häufiges
> »PHP-auf-PHP-zu« zu verwenden, findet sich sogar
> im PHP-Manual:
>
> http://php.net/manual/de/language.basic-syntax.phpmode.php
> | ... aber für die Ausgabe von großen Textblöcken ist der
> | Ausstieg aus dem Parse-Modus generell effizienter, als
> | den gesamten Text durch echo oder print zu jagen.

Guten Morgen!  :-)

Vielen Dank für die Erklärung und die Links. :-)

Gruß,
Manya