Stringaddition
MO
- php
0 Nicole0 Thomas Luethi0 Nicole0 Thomas Luethi1 Nicole
0 MO0 MO
0 Variablen im String auswerten
lulu
Hallo zusammen.
Ich habe nun schon einiges gelesen, aber es ist mir immer noch nicht ganz klar, wie die Stringaddition korrekt gemacht wird, wenn Anführungszeichen im String enthalten sind:
Beispiel 1:
$TempContent = "<img src="".$imgPath."" Width="".$imgWidth."" Height="".$imgHeight."" Title="".$imgTitle."" Alt="".$imgAlt."">";
Beispiel 2:
$TempContent = "<img src='".$imgPath."' Width='".$imgWidth."' Height='".$imgHeight."' Title='".$imgTitle."' Alt='".$imgAlt."'>";
Beispiel 3:
$TempContent = "<img src="$imgPath" Width="$imgWidth" Height="$imgHeight" Title="$imgTitle" Alt="$imgAlt">";
Die einfachste Lösung ist Beispiel 3. Aber welches ist die wirklich korrekte? Funktionieren tun alle drei....
Was meint ihr?
Hallo MO,
ich finde solche Fragen gut, weil die Literatur
solche Fragen als "Vorgegeben" abtut und nicht weiter
darauf eingeht. Als ich noch Anfänger war hatte ich tonnenweise
solcher Fragen, die mir keiner beantworten konnte. ;-)
Beispiel 1:
$TempContent = "<img src="".$imgPath."" Width="".$imgWidth."" Height="".$imgHeight."" Title="".$imgTitle."" Alt="".$imgAlt."">";
Ist sinnvoll wenn eine Variable falsch verstanden werden könnte,
somit schadet es natürlich nicht sich diese Schreibweise
anzugewöhnen wenn man eine solche Fehlerquelle durch
seinen Schreibstil im Vorfeld eleminiert.
Bsp.
$test = 1234;
$xy = "xxxHallo Welt $testxxx";
// Hier würde durch diesen Flüchtigkeitsfehler
// die Variable $testxxx gesucht und nicht $test.
------------------------------
Beispiel 2:
$TempContent = "<img src='".$imgPath."' Width='".$imgWidth."' Height='".$imgHeight."' Title='".$imgTitle."' Alt='".$imgAlt."'>";
Einfache Anführungszeichen werden manchmal ignoriert,
habe schlechte Erfahrrung damit.
-----------------------
Beispiel 3:
$TempContent = "<img src="$imgPath" Width="$imgWidth" Height="$imgHeight" Title="$imgTitle" Alt="$imgAlt">";
Standard so würde auch der PHP Parser das mit der
Funktion addslashes(); machen.
Fazit:
Wähle zwischen 1 oder 3, aber bleibe einem Stil treu.
Gruss Nikki
Hallo,
$TempContent = "<img src='".$imgPath."' Width='".$imgWidth."' Height='".$imgHeight."' Title='".$imgTitle."' Alt='".$imgAlt."'>";
Einfache Anführungszeichen werden manchmal ignoriert,
habe schlechte Erfahrrung damit.
Einfache Anfuehrungszeichen waren schon in HTML 2.0 ausdruecklich
erlaubt, um Attributswerte "einzupacken":
RFC 1866 - Hypertext Markup Language - 2.0 (November 1995):
http://ftp.ics.uci.edu/pub/ietf/html/rfc1866.txt
"The value of the attribute may be either:
* A string literal, delimited by single quotes or double
quotes and not containing any occurrences of the delimiting
character.
[...]"
Etwa das gleiche steht in der HTML 4.01 Specification:
http://www.w3.org/TR/html401/intro/sgmltut.html#h-3.2.2
Ich halte es deshalb bis zum Beweis des Gegenteils fuer ein
Geruecht und fuer hartnaeckigen Aberglauben, dass einfache
Anfuehrungszeichen Probleme bereiten sollen.
Und ich denke, dass ein Browser, der nicht mal HTML 2.0 kann,
auf dem heutigen Internet und Web nicht mehr einsatzfaehig ist.
@Nicole: Kannst Du es bitte etwas genauer erlaeutern?
Mit einem konkreten (validen) Beispiel bzw. mit einem konkreten Browser,
der das offensichtlich nicht kann? Ich waere Dir sehr dankbar.
---
Ich wuerde es wie folgt schreiben:
$TempContent = "<img src='$imgPath' width='$imgWidth' height='$imgHeight' title='$imgTitle' alt='$imgAlt'>";
Das ist IMHO am uebersichtlichsten (abgesehen von der Heredoc-Schreibweise).
Es darf nur kein (hier: einfaches) Anfuehrungszeichen in einem der Werte (z.B. Title, Alt)
vorkommen, aber darauf muss man sowieso achten, egal, mit welcher PHP-Schreibweise
man den String zusammenbaut und egal, welche Anfuehrungezeichen man verwendet.
Zwischen einfachen Anfuehrungszeichen darf kein uncodiertes einfaches Anf.z. vorkommen,
zwischen doppelten kein uncodiertes doppeltes Anf.z. - eigentlich logisch, und es steht
auch ausdruecklich in den HTML Specifications.
Andere Nachteile sehe ich nicht.
Folgendes ist valides HTML 4 und funktioniert in allen mir bekannten Browsern problemlos,
inklusive korrekter Tooltip-Anzeige:
<img src="elvis.jpg" alt="Elvis "The King" Presley" title="Elvis "The King" Presley">
<img src='rocknroll.gif' alt='Rock'n'Roll' title='Rock'n'Roll'>
"Es ist Geschmackssache", bzw. wie Lulu schrieb: "Es kommt darauf an"
;-)
Gruesse,
Thomas
P.S. @lulu: MO schreibt offenbar nicht XHTML - also darf er/sie die Attributs-Namen
gross oder klein schreiben, nach Lust und Laune.
Natuerlich ist es im Hinblick auf einen spaeteren Wechsel zu XHTML empfehlenswert,
sich auch schon in HTML an die Regeln zu halten, die mit HTML vereinbar sind,
z.B. konsequente Kleinschreibung von Element- und Attributs-Namen, aber
vorgeschrieben ist das nirgends.
Ich weiss, du hast "sollten" geschrieben, nicht "muessen"...
Hallo Thomas,
wie ich schon sagt ich hasse einfache Anführungszeichen
weil ich konsequent die letzten Jahre immer Probleme
damit hatte. Zuletzt vor 2 Tagen:
Ich nutze einigen Sprachen die ich include.
Da alle in einem Array sind, sind " durch Backslashes
geschützt. Ebenso aber auch '. Alles durch die Funktion
addslashes. Bei der Ausgabe im Browser sieht das dann so
aus, dass " ganz normal und ' dann so ' angezeigt werden.
Allein aus diesem Grund musste ich das gesamtte Array dann
nochmal durchlaufen lassen:
// foreach($lang_ar as $ohneslash){$lang_ar[$i]=stripslashes($ohneslash);$i++;}
Dies ist nur eines von vielen Beispielen.
Ein anderes steht hier in den Antworten bereits drin:
Also z.B. bei alt="rock'n'roll".
Gruss Nikki
@Nicole: Kannst Du es bitte etwas genauer erlaeutern?
Mit einem konkreten (validen) Beispiel bzw. mit einem konkreten Browser,
der das offensichtlich nicht kann? Ich waere Dir sehr dankbar.
Hallo Nikki,
Zum Code-Beispiel von MO
$TempContent = "<img src='".$imgPath."' Width='".$imgWidth."' Height='".$imgHeight."' Title='".$imgTitle."' Alt='".$imgAlt."'>";
welches z.B. folgendes HTML ausspuckt:
<img src='pfad/zum/bild.gif' Width='100' Height='50' Title='Titel/Tooltip Text' Alt='Alternativ Text'>
hattest Du geschrieben:
Einfache Anführungszeichen werden manchmal ignoriert,
habe schlechte Erfahrrung damit.
Das verstand ich so, dass Du der Meinung bist, dass _Browser_
mit _HTML-Quellcode_, bei dem die Attributswerte durch
einfache Anfuehrungszeichen begrenzt sind, nicht klarkommen.
Und _das_ kann ich einfach nicht glauben.
Jetzt schreibst Du aber:
[...] Bei der Ausgabe im Browser sieht das dann so
aus, dass " ganz normal und ' dann so ' angezeigt werden.
Das ist aber _Dein_ Problem, das mit PHP und mit (allenfalls automatischem)
Hinzufuegen und Entfernen von Backslashes bei irgendwelchen Transaktionen
(Formulare, MySQL, ...) zu tun hat.
Die Backslashes stehen dann offensichtlich auch im HTML-Quelltext,
weil _Du_ sie nicht entfernt hast.
Die Unterschiede zwischen " und ' betreffen PHP (z.B. addslashes/stripslashes)
und allenfalls MySQL.
Das alles hat aber IMHO ueberhaupt nichts mit HTML zu tun.
Und auch nicht mit Browsern.
Mein Fazit:
Die Schreibweise
$TempContent = "<img src='".$imgPath."' Width='".$imgWidth."' Height='".$imgHeight."' Title='".$imgTitle."' Alt='".$imgAlt."'>";
und das entsprechende, uebersichtlichere
$TempContent = "<img src='$imgPath' width='$imgWidth' height='$imgHeight' title='$imgTitle' alt='$imgAlt'>";
ist voellig unproblematisch - solange die Variablen $imgPath, $imgTitle und $imgAlt
kein uncodiertes einfaches Anfuehrungszeichen ' enthalten.
(Bei $imgWidth und $imgHeight gehe ich mal davon aus, dass sie nur Zahlen enthalten.)
Aber das schrieb ich ja bereits, und es hat wiederum nichts
mit PHP zu tun, sondern ist logisch, wenn man die HTML
Specification liest und wenn man den resultierenden
HTML-Quellcode anschaut.
Freundliche Gruesse
Thomas
Hallo Thomas,
Das ist aber _Dein_ Problem, das mit PHP und mit (allenfalls automatischem)
Hinzufuegen und Entfernen von Backslashes bei irgendwelchen Transaktionen
(Formulare, MySQL, ...) zu tun hat.
Nein, das ist Dein Problem !
Die Rubrik dieser Frage heisst PHP und nicht HTML.
Die Frage war "was ist sinnvoller".
Die Backslashes stehen dann offensichtlich auch im HTML-Quelltext,
weil _Du_ sie nicht entfernt hast.
Ja stehen Sie aber auch bei ", und diese werden eben nicht
im "BROWSER" angezeigt. Was widerum gegen die Benutzung
von ' spricht, solange man nicht muss.
Das alles hat aber IMHO ueberhaupt nichts mit HTML zu tun.
Und auch nicht mit Browsern.
Eben es geht um PHP ;-)
Gruss Nikki
Ich wuerde es wie folgt schreiben:
$TempContent = "<img src='$imgPath' width='$imgWidth' height='$imgHeight' title='$imgTitle' alt='$imgAlt'>";
Hallo ihr drei.
Hab zwar eben schon geantwortet..aber meine Antwort ist wohl nicht angekommen...komisch...mein Mozilla?
Ok..hier nochmal..
Vielen Dank für die schnellen Antworten...sie helfen mir doch sehr
@Thomas
Ich bin ein Er....
Aber zu deiner Antwort:
Ich dacht, das Variablen die in Strings mit einfachen Anführungszeichen stehen vom Parser nicht interpretiert werden? Oder habe ich da was falsch verstanden....
Zitat aus http://de.php.net/manual/de/language.types.string.php
"Anmerkung: Anders als bei den zwei anderen Schreibweisen werden Variablen und escape-Sequenzen für spezielle Zeichen innerhalb von single-quoted Strings nicht ausgewertet."
Bitte um Erklärung....
@lulu
Vielen Dank für die Links...habe ich mir gleich mal in mein Scribbles gespeichert...
@Nicole
Ja, du hast recht. Ich weiß auch nicht, warum sie hier in diesem Beispiel ausgerechnet Groß geschrieben habe...als aler Verfechter der durchgängigen Kleinschreibung....hihi...tststs
Habe ich jetzt garnicht drauf geachtet
Wünsch noch einen wundervollen Tag
MO (Martin Oliver)
Ich wuerde es wie folgt schreiben:
$TempContent = "<img src='$imgPath' width='$imgWidth' height='$imgHeight' title='$imgTitle' alt='$imgAlt'>";
Ups...sollte genauer lesen..schäm
ist ja in doppelten Anführungszeichen....ja ok...Schande über mich...
Liebe Grüße
MO
Moin MO
Ich habe nun schon einiges gelesen, aber es ist mir immer noch nicht ganz klar, wie die Stringaddition korrekt gemacht wird, wenn Anführungszeichen im String enthalten sind:
Beispiel 1:
$TempContent = "<img src="".$imgPath."" Width="".$imgWidth."" Height="".$imgHeight."" Title="".$imgTitle."" Alt="".$imgAlt."">";Beispiel 2:
$TempContent = "<img src='".$imgPath."' Width='".$imgWidth."' Height='".$imgHeight."' Title='".$imgTitle."' Alt='".$imgAlt."'>";Beispiel 3:
$TempContent = "<img src="$imgPath" Width="$imgWidth" Height="$imgHeight" Title="$imgTitle" Alt="$imgAlt">";Die einfachste Lösung ist Beispiel 3. Aber welches ist die wirklich korrekte? Funktionieren tun alle drei....
Was meint ihr?
Die Attribut-Namen sollten klein geschrieben werden.
Beispiel 2 könnte problematisch werden sobald ein ' als Attribut-Wert
benutzt werden muss.
Also z.B. bei alt="rock'n'roll".
Ansonsten lies das
http://de.php.net/manual/en/language.types.string.php
Mein Favorit wäre
http://de.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
oder
http://de.php.net/manual/en/function.sprintf.php
Und unter Stringaddition versteht man eigentlich etwas anderes.
http://de.php.net/manual/en/language.operators.string.php
Ansonsten kann man Deine Frage wohl am besten mit "Es kommt drauf an"
beantworten, wobei es neben Deinen drei Beispielen noch einige weitere Lösungsmöglichkeiten gibt.
Viele Grüße
lulu