php tırnak işaretleri kaçış noktası nedir

9 Cevap

İşte ben öğreniyorum bir kitap, neden tırnak işaretleri necassery kaçan bir doğrulama betik? örneğin <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>

9 Cevap

Bir dize içinde tırnak işaretleri kaçan dize biten engeller. Örneğin:

$str = "Hi this is a "broken" string";

"Hi this is a", broken ve "string ": Esas PHP ayrıştırıcı çok statments görür. Bu kod geçersiz çizgi haline gelir.

Ayrıştırıcı ilk tırnak işareti karşılaştığında, o bir dize buldu bilir, ve bu dize bittiği yerde bir sonraki tırnak işareti söyler biliyor. Tırnak işaretlerini inside sizin dize olmasını istiyorsanız, onların önünde tersbölülerle ile kaçan dize sonu olmadığını ayrıştırıcı söylemek gerekir.

Eğer tek tırnak, ' ile dize başlarsanız, o zaman sadece dizge içinde tek tırnak kaçmak gerekir. Çift tırnak ile aynı. Bu iki çizgi de geçerli kod şunlardır:

$str = "This string is 'not' broken";
$str = 'This string is also "not" broken';

Sadece hangisi dize açmak ve kapatmak için kullanılan bir izlemek gerekiyor.

Eğer bir dize başladığınızda ", herhangi çıkmamış " içindeki dizenin sonunu işaretler:

$str = " A string can be enclosed in ' or ".";
                                          ^
this " which is not escaped will prematurely end the string.

Herhangi bir " "" içinde görünen kaçmak Bunu önlemek için

$str = " A string can be enclosed in ' or \".";

Benzer şekilde 'içine bir dize bir' çıkmamış 'sorunlara neden olur.

Basit bir çalışma gerçekleştirmek için yaklaşık olduğu bir " ' ' anlamıyla tedavi edilir ve böylece bir ' içinde " "

Eğer kaçan önlemek istiyorsanız Yani " Eğer ' ' içinde dize içine ancak bir ' ' değişkenleri interpolasyon olmayacak içeride, bunu hatırlamamız gerekiyor.

Bir dize için değer atama çünkü orada gerekli. Ayrıca tek tırnak ve çift tırnak kaçmak zorunda değil, ancak dikkatli olmak ve dize tek bir tırnak kaçmak gerekir olabilir:

$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>';

PHP çözümleyici, aksi halde bu tırnak işaretleri yerine dize parçası olma dizeyi sona zannedebilir çünkü tırnak işaretleri kaçan gereklidir.

Tırnak işaretleri kaçan önlemek için, bazı durumlarda bunun yerine kesme kullanabilir, ancak (değişkenin içeriği alışkanlık outputted, yani değişkenin sadece adını) Kesme içindeki kapalı dizeleri içinde değişkenler alışkanlık çözümlenebilir.

Tek seferde HTML birden fazla satır çıkış Ancak, tek veya çift tırnak ne olduğunu elverişli. Belki kitap okuyucu şaşırtmak ya da henüz yeni kavramları tanıtmak istemedim, ama sen değişkenler olmadan çıktı istediğiniz uzun bir HTML blok varsa, genel olarak, o zaman basitçe gibi, PHP modundan çıkmak için en iyisi:

<?php
for ($i = 0; $i < 10; $i++)
{
?>
Some text goes here
<input type="text" name="textfield[]" />
<br />
<?php
}
?>

Bu optimal hem hesaplama olduğunu ve kaçış dizileri ya da böyle bir şey endişesi olmadan metin yazmak için izin verir. Eğer değişkenleri olması gerekir, ancak her zaman en iyi çözüm (gerçi, her zaman sadece çıkışa geri PHP moduna değişken gidebiliriz) olmayabilir. Bu amaçlar için, dizeler için heredoc yazım var. Örneğin:

<?php
for ($i = 0; $i < 10; $i++)
{
    echo <<<SOMELABEL
Text number $i: 
<input type="text" name="textfield[$i]" />
<br />
SOMELABEL;
}
?>

Dize yalnızca metni SOMELABEL; (Açıkçası, istediğiniz etiket herhangi bir isim olabilir) içeren çizgisine kadar <<<SOMELABEL başlar tüm metin oluşur. Tüm değişkenler ve PHP kaçış dizisi çalışma heredoc sözdizimi içinde, yani dize HTML birden çok satırdan oluşur zaman herhangi bir tırnak kaçan hakkında endişelenmenize gerek yok çünkü, ideal olabilir.

Eğer " ile bir dize alıntı ve sonra dize içinde bu karakteri kullanırsanız, bu dize sona erecek. Bunun yerine, iki ' ve " kullanımı

'<option value="char">char</option>'

Sen tırnak işaretleri bir dize değil bunun sonu parçası olduğunu PHP anlatmak için bunları kullanın. Örneğin:

my_string = "hello "world"";

bir hata verecek, PHP çözümleyici yaşıyor. Sizin seçenekleri onları kaçmak için ya vardır:

my_string = "hello \"world\"";

veya dize sınırlandırmak için tek tırnak kullanın:

my_string = 'hello "world"';
$form_block = "
<form action=\"do_createtable.php\"...

Depolanan dize, örneğin, form_block bir dize olduğunu belirtmek için tırnak içine alınır.

Şimdi bu dize dize içinde tırnak işareti karakteri içeriyor, ama sizinle bu tırnak işareti göstermek için ise sadece bir "kaçış olmadan, daha sonra php yorumlayıcısı anlayacağı dizenin sonuna kadar.

Örneğin

$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="

Ayrıca baypas gibi bir şey kullanarak hiç tırnak kaçan olabilir

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;

burada echo <<<EOD; ve EOD; kendi hatları Hangi

8 cevaplar ve tek manuel link. Bu beni korkutuyor.