2 Stimmen

Welchen Sinn hat es, Anführungszeichen in php zu vermeiden?

Hier ist eine Validierung Skript aus einem Buch, das ich lerne, Warum ist escaping die Anführungszeichen necassery? z.B.. <option value=\"char\">char</option>

<?php
//validate important input
if ((!$_POST[table_name]) || (!$_POST[num_fields])) {
    header( "location: show_createtable.html");
           exit;
}

//begin creating form for display
$form_block = "
<form action=\"do_createtable.php\" method=\"post\">
<input name=\"table_name\" type=\"hidden\" value=\"$_POST[table_name]\">
<table cellspacing=\"5\" cellpadding=\"5\">
  <tr>
    <th>Field Name</th><th>Field Type</th><th>Table Length</th>
  </tr>";

//count from 0 until you reach the number fo fields
for ($i = 0; $i <$_POST[num_fields]; $i++) {
  $form_block .="
  <tr>
  <td align=center><input type=\"texr\" name=\"field name[]\"
  size=\"30\"></td>
  <td align=center>
    <select name=\"field_type[]\">
        <option value=\"char\">char</option>
        <option value=\"date\">date</option>
        <option value=\"float\">float</option>
        <option value=\"int\">int</option>
        <option value=\"text\">text</option>
        <option value=\"varchar\">varchar</option>
        </select>
  </td>
  <td align=center><input type=\"text\" name=\"field_length[]\" size=\"5\">
  </td>
</tr>";
}

//finish up the form 
$form_block .= "
<tr>
    <td align=center colspan=3><input type =\"submit\" value=\"create table\">
    </td>
</tr>
</table>
</form>";

?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Create a database table: Step 2</title>
</head>

<body>
<h1>defnie fields for <? echo "$_POST[table_name]"; ?> 
</h1>
<? echo "$form_block"; ?>

</body>
</html>

1voto

Marijn van Vliet Punkte 4961

Sie verwenden sie, um PHP mitzuteilen, dass die Anführungszeichen Teil einer Zeichenkette sind und nicht das Ende davon. Zum Beispiel:

my_string = "hello "world"";

zu einem Fehler führen würde, kommt der PHP-Parser durcheinander. Sie haben die Möglichkeit, sie entweder zu escapen:

my_string = "hello \"world\"";

oder verwenden Sie einfache Anführungszeichen zur Abgrenzung der Zeichenfolge:

my_string = 'hello "world"';

1voto

ladaghini Punkte 868
$form_block = "
<form action=\"do_createtable.php\"...

Die Zeichenkette, die z. B. in form_block gespeichert ist, wird in Anführungszeichen gesetzt, um zu verdeutlichen, dass es sich um eine Zeichenkette handelt.

Diese Zeichenkette enthält nun das Anführungszeichen innerhalb der Zeichenkette, aber wenn Sie dieses Anführungszeichen einfach mit einem " darstellen, ohne es zu escapen, dann wird der PHP-Interpreter dies als Ende der Zeichenkette verstehen.

z.B.

$form_block = "
<form action=\"do_createtable.php\"
//            ^
//            |
//          escaped quotation mark, part of string.
//      notice how this text is red because it's a string.
//      and I need to end this line with a quotation mark to end the string."
$form_block = "
<form action="do_createtable.php\"
//           ^
//           |
//          not escaped quotation mark, so string will end there, it will be "<form action="

0voto

Jamie Punkte 1342

Können Sie die Anführungszeichen auch ganz umgehen, indem Sie etwas wie

echo <<<EOD
    <td align=center><input type="texr" name="field name[]"
    size="30"></td>
    <td align=center>
      <select name="field_type[]">
          <option value="char">char</option>
          <option value="date">date</option>
          <option value="float">float</option>
          <option value="int">int</option>
          <option value="text">text</option>
          <option value="varchar">varchar</option>
          </select>
EOD;

echo <<<EOD; und EOD; sind auf ihren eigenen Linien

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X