2010-11-28 10 views
1
<?php echo ($i % 6 == 5) ? 'style=\"margin-right:0px\"' : ''; ?> 

Ich bekomme nur Stil = "" auf dem View-Port gedruckt.PHP grundlegende Verkettungsproblem?

Update: Warum ist es unnötig, doppelte Anführungszeichen zu entkommen, wenn wir in einer Zeichenfolge sind? Da doppelte Anführungszeichen nie als etwas anderes als eine Zeichenfolge verwendet werden, wenn sie in einfachen Anführungszeichen stehen?

Vielen Dank im Voraus, MEM

+0

Können wir mehr von Ihrem Code sehen? Die Backslashes sind nicht wichtig. Sie sollten Stil = \ "margin-right: 0px \" nicht style = "" selbst mit den Schrägstrichen sehen. – typeoneerror

+0

wie hast du zufällig style = " " – typeoneerror

+0

Wo schaust du hin? das Ergebnis? Rohausgabe? Browser? Browser-DOM-Inspektor? – deceze

Antwort

3

Warum ist es unnötig, doppelte Anführungszeichen zu vermeiden, wenn wir in einer Zeichenfolge sind? Weil doppelte Anführungszeichen niemals als etwas anderes als eine Zeichenkette genommen werden, wenn sie in einfachen Anführungszeichen stehen?

The manual, in Bezug auf einzelne Strings in Anführungszeichen:

Um eine wörtliche Apostroph angeben, entkommen sie mit einem Backslash (\). Um einen umgekehrten Schrägstrich anzugeben, verdoppeln Sie ihn (\\). Alle anderen Backslash-Instanzen werden als Literal-Backslash behandelt: Dies bedeutet, dass die anderen Escape-Sequenzen, an die Sie möglicherweise gewöhnt sind, wie \ r oder \ n, genau wie angegeben ausgegeben werden und keine besondere Bedeutung haben.

+1

Richtig, also gibt es style aus = \ "margin-right: 0px \" not style = "", also ist das nicht sein Problem. – typeoneerror

+0

@Typeoneerror, ja, das spricht seine erste Frage nicht an [nun, eigentlich gibt es keine erste Frage], sondern nur seine zweite Frage, die er zu seinem Update stellte. – Matthew

+2

Wenn er es in einem Browser anschaut (sogar über "view source"), vermute ich, dass der xml/html-Parser des Browsers den unzulässigen Attributwert in 'style = \" margin-right: 0px \ "filtert und verwirft, lege nur 'style =" "'. – Lee

2

Sie verwendet Apostrophe ' für diese Saite, so doppelte Anführungszeichen " entweicht innerhalb der String nicht notwendig ist. Ersetzen Sie das durch 'style="margin-right:0px"' und es sollte gut funktionieren.

Um zu erklären, wie PHP Strings und Zitate ein wenig besser behandelt, ist es hilfreich, den Unterschied zwischen ' und " zu kennen. Strings, die mit ' gekapselt sind, werden immer so angezeigt, wie sie sind. Nichts innerhalb der Zeichenfolge wird analysiert, einschließlich aller Escape-Zeichen (wie \n für einen Zeilenumbruch oder mit Escapezeichen versehene Anführungszeichen, mit Ausnahme von geschützten einfachen Anführungszeichen \'). Umgekehrt werden Strings, die in " eingekapselt sind, analysiert. Wenn Sie also Escape-Zeichen haben, werden sie korrekt angezeigt, und wenn Sie Variablen innerhalb des Strings haben, werden sie ebenfalls eingegeben. Zum Beispiel

// Set name variable to my name 
$name = "nhinkle"; 

// Echo hello name with single quotes 
echo 'hello {$name}'; 
// The result will be "hello {$name}" 

// Echo hello name with double quotes 
echo "hello {$name}"; 
// The result will be "hello nhinkle" 

Es dauert weniger Rechenleistung einfache Anführungszeichen zu verwenden, da PHP nicht die Zeichenfolge scannen müssen, etwas zu entkommen, es muss nur das Ende der Zeichenfolge finden. Wenn Sie jedoch Dinge in der Zeichenfolge analysieren müssen, stellen Sie sicher, dass doppelte Anführungszeichen verwendet werden.

+0

@nhinkie - vielen Dank. Das war eine sehr klare Erklärung, die ich lange vermisst habe. Prost! ;) – MEM

2

Es ist nicht notwendig, doppelte Anführungszeichen in einfache Anführungszeichen zu schreiben.

<?php echo ($i % 6 == 5) ? 'style="margin-right:0px"' : ''; ?> 

Sie müssen nur einfache Anführungszeichen in einfache Anführungszeichen oder Anführungszeichen in Anführungszeichen umwandeln. Wenn Sie ein einfaches Anführungszeichen in einer einzelnen Zeichenfolge in Anführungszeichen schreiben möchten, würde dieses einfache Anführungszeichen die Zeichenfolge beenden.

$foo = 'a'b'; 

PHP sieht dies als die Zeichenfolge a, gefolgt von einer sinnlosen b und dem Beginn des Strings ';, die nie beendet wird; Das ist ungültige Syntax.

$foo = 'a\'b'; 

Dies wird korrekt als die Zeichenfolge a'b analysiert. Sie haben mit der Bedeutung das Zitat würde in der Regel an dieser Stelle haben würde.

Mit doppelten Anführungszeichen in einfachen Anführungszeichen gibt es keine solche Mehrdeutigkeit. Ein doppeltes Anführungszeichen innerhalb einer einzelnen Zeichenfolge in Anführungszeichen beendet die Zeichenfolge nicht, es hat dort keine spezielle Bedeutung, die es zu umgehen gilt. Wenn Sie einen umgekehrten Schrägstrich einfügen, wird der umgekehrte Schrägstrich wörtlich verwendet.

$foo = 'a"b'; // a"b 
$foo = 'a\"b'; // a\"b 

Ich nehme an, das Problem ist, wie Sie die Ausgabe betrachten. Wenn die Ausgabe style=\"…\" lautet, können die doppelten doppelten Anführungszeichen in der Umgebung, in der Sie die Ausgabe betrachten, zu ungültiger Syntax führen.

+0

Begründung für den Downvote, bitte? – deceze

+0

jemand hat meine etwas ähnliche Antwort ebenfalls abgelehnt. Nicht sicher warum. Nach deinem Schnitt fühle ich, dass deine Antwort ziemlich gut ist. +1, also zumindest bist du jetzt gerade. Erklärungen wären nett. – nhinkle