2012-04-09 3 views
1

Ein String sieht wie folgt aus:Php echo wobei sowohl "und" in der Zeichenfolge verwendet werden

<form id="unban" method="post" action="unban.php?uid=<? echo $uID; ?>"> 
       <input type="hidden" name="name" value="" /> 
       <a onclick="document.getElementById('unban').submit();">UnBan</a> 
       </form> 

Und ich brauche dies mit einer Last von anderen Variablen als Echo ausgegeben werden (wie es if-Anweisungen so ich kann es nur outisde php-Tags setzen) aber ich kann nicht einen Weg finden, es in einer variablen zu speichern und im Echo verwendet Mein Echo wie folgt aussieht:.

echo "<tr><td>" . $row['username'] . "</td><td>" . $banBool . "</td><td>". $status ."</td><td>" . $row['full_name'] . "</td></tr>"; 

wo $status die Form auf einem oben abhängig sein würde, if-Anweisung

Gibt es eine Möglichkeit, es als String zu halten und dies immer noch zu tun?

Auch nur die JavaScript-Syntax zu klären erfordert ‚Ziel‘ und tut „Ziel“ erlauben

+2

verwenden Sie die Anführungszeichen mit \ – prodigitalson

+2

Ewww entweichen kann, die ' animuson

+0

@animuson nein solltest du nicht, mpm

Antwort

2

Sie normale HTML innerhalb eines PHP schreiben können, wenn Block - nur schließen und erneut öffnen Sie die PHP-Tags:

<?php 
if($something == $somethingelse) { 
    ?> 
    <form id="unban" method="post" action="unban.php?uid=<?php echo $uID; ?>"> 
    ... 
    </form> 
    <?php 
} 

Wenn Sie es wirklich in einem String halten müssen, nur um sicher machen zu entkommen je nachdem, welche Art von Zitaten der Zeichenfolge von hielt vor jedem einen umgekehrten Schrägstrich ergänzt:

$status = '<form id="unban" method="post" action="unban.php?uid='.$uID.'"> 
      <input type="hidden" name="name" value="" /> 
      <a onclick="document.getElementById(\'unban\').submit();">UnBan</a> 
      </form> 

(Beachten Sie auch, Sie kein Echo innerhalb einer Variablen tun können - nur die Zeichenfolge mit der Variablen verketten) mit Variablen innerhalb der Saiten

+0

Danke für deine Hilfe! – zomboble

0

Die sauberste Art, wie ich Echo mag, ist wie folgt:

echo "This is a string with a {$variables["variable"]} in it. If I have to use another double-quote within this string I'll escape it with a \"backslash\"."; 

Normalerweise vermeide ich es, einfache und doppelte Anführungszeichen zu mischen (außer bei Bedarf, wie Ihre JavaScript-Funktion, um Verwirrung zu vermeiden.)

Ihre HTML könnte wie so geschrieben werden:

echo "<form id=\"unban\" method=\"post\" action=\"unban.php?uid={$uID}\"> 
    <input type=\"hidden\" name=\"name\" value=\"\" /> 
    <a onclick=\"document.getElementById('unban').submit();\">UnBan</a> 
</form>\n"; 

Die resultierende Zeichenfolge, die die natürlichen Zeichen haben wird echo'ed und korrekte Leerzeichen Formatierung haben.

+0

Ich mache das nie oder empfehle es. Es ist sehr schwierig herauszufinden, wo die Variablen sind, und oft ist es völlig falsch. Variablen müssen normalerweise maskiert werden, um XSS zu vermeiden und was nicht. Verkettung oder mehrere Echoparameter sind meiner Meinung nach der richtige Weg. – Brad

+0

Ich finde, dass diese Methode es einfacher macht, herauszufinden, wo die Variablen sind (Notepad ++ hebt diese in weiß hervor, anstatt sie grau zu halten). Wie ist es "oft mal" völlig falsch? Und wie hält dich das davon ab, deinen Variablen zu entkommen? Sie können sie entweder bei der Zuweisung ausschließen oder Sie können die Zeichenfolge unterbrechen, wenn Sie sie inline entfernen möchten. – Travesty3

+0

Meiner Meinung nach ist es das Beste, Dinge zu entkommen, wenn sie in dem spezifischen Kontext verwendet werden, der es erfordert zu entkommen. Ich möchte vielleicht, dass die Daten auf eine saubere Weise für die spätere Verwendung gespeichert werden und dass sie während der Zuweisung entkoppelt werden, was ohne eine zweite Kopie nicht möglich ist. Ich entscheide mich für etwas in der Art von: echo 'Irgendein Text', htmlspecialchars ($ somevar), 'etwas mehr Text'; 'Meiner Meinung nach wird dadurch viel klarer, was vor sich geht. – Brad

0

Verwenden Schrägstriche Anführungszeichen zu entkommen: \

1

‘Jedes Mal, wenn Sie die Ausgabe etwas komplexer oder müssen beide Arten von Kursen, Sie HEREDOC Zeichenfolge verwenden sollte:

echo <<<HTML 

    <tr><td> $row[username] </td><td> 
    $banBool </td><td> $status </td><td> $row[full_name] 
    </td></tr> 

HTML; 

Hinweis, wie Sie Array-Schlüssel vermeiden können zitiert hier (verhält sich wie eine doppelte Anführungszeichenfolge).

Wenn Sie einen String für Javascript Nutzung vorbereiten müssen, dann zusätzlich json_encode() könnte sinnvoll sein.

0

Warum entkommen Sie nicht nur die Zitate?

echo "\"", '\''; // "' 

Wenn das nicht möglich ist heredoc and nowdoc Syntaxen PHP-Check-out. Eine dritte Möglichkeit wäre, den PHP-Block in der Mitte einer IF-Anweisung zu schließen und den HTML-Code direkt auszugeben.

Oh, könnten Sie auch output-buffering :-)