PHP ile yazılan dizeleri geçen Sorunu

7 Cevap php

Temelde bir (çok) basit bir arama motoru geliştiriyorum. Bir arama terimi girebilirsiniz ve sonuç sayfasına alınır - çalışıyor. $ Vadeli $ _POST ['terimi'] değeri: Ancak sonuç sayfasında, ben önümüzdeki 10 sonuçlara götürecek bir düğme var.

echo "<input type='hidden' name='term' value='" . $term . "'>";

Bu terimi ile, aşağıdaki problem örneğin, "Aidan" olduğunu neden olur.

Sonraki 10 butonu tıklandığında, terim Aidan \ olur ve başka hiçbir sonuç bulundu.

Ben $ dönem için hiçbir şey yapmıyorum.

Ben genellikle Java kullanabilirsiniz, ancak bu tek atama için PHP kullanmak için gerekli am!

Herhangi bir yardım büyük mutluluk duyacağız.

7 Cevap

Bu http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc ve / veya http://php.net/manual/en/function.addslashes.php bunlar porblem tanımlamak için yardımcı olmalıdır kontrol, veri kaçar PHP olabilir

Try looking after addslashes() et stripslashes() http://php.net/manual/en/function.addslashes.php

Sorununuzla ilgili olarak, ben böyle bir şey eklemek için denemek gerektiğini düşünüyorum:

$search = stripslashes($_POST['term']);

Çift tırnak kullanırsanız, bir değişken kullanırken dize kırmak zorunda değilsiniz. Ayrıca, halihazırda veya htmlentities() veya urlencode() belirtildiği gibi çeşitli seçenekleri kullanabilirsiniz. Ben daha sonra, sadece kuzen kullanmak istiyorsunuz. Yani ile sona ereceğini:

$term = urlencode($term);
echo "<input type='hidden' name='term' value=\"$term\">";

Eğer sayfa için htmlspecialchars() every single bit of data çıktı gerekir. Sizinki gibi bir set-up çok XSS açıkları dünyada var nedeni ve onlara katkıda bulunmamalıdır.

echo "<input type='hidden' name='term' value='" . htmlspecialchars($term) . "'>";

O var bir kere, hiçbir karanlık addslashes / alıntı kaçan / ne olursa olsun artık ihtiyacınız olacaktır.

Kodunuzu boyunca o kolaylaştırmak için, tanımlamak

function h($s) {  htmlspecialchars($s); }

echo "<input type='hidden' name='term' value='" . h($term) . "'>";

Aradığınız işlevi htmlspecialchars(). Ancak çalışması için, size parametresini sarmak için tırnak işareti kullanmanız gerekir.

Ilgili bölü varsa Artı, stripslashes() function gerekli olabilir.

Yani:

$term = htmlspecialchars( stripslashes( $term ) );

echo '<input type="text" name="term" value="' . $term . '" >';
  1. Her zaman POST değil, arama için GET yöntemini kullanın.
  2. Sihirli tırnak kapatmak veya şerit elle eğik ya
  3. Formun alanın değerini kodlamak için ENT_QUOTES parametresi ile htmllspecialchars kullanın.
  4. Çılgınlığı tırnak tüm bu kurtulmak için, PHP echo kullanarak değil, olduğu gibi HTML yazdırmak için düşünün
  5. Most important part. Eğer veritabanı arama için terim alıntı varsa, formda alıntı değişken kullanmayın.

bu yüzden

if (isset($_GET['term'])) {
  if (get_magic_quotes_gpc()) $_GET['term'] = stripslashes($_GET['term']);
  //$term=mysql_real_escape_string($_GET['term']);
  //perform search here. 
  //
  $term = htmlspecialchars($_GET['term'],ENT_QUOTES); //from $_GET again
  ?>
  <input type="hidden" name="term" value="<?php echo $term?>">
  <?
}

Ben kolay yolu bütün bir alan gizli olarak $ terim koymak olmadığını düşünüyorum. Pagination için, oturumda aranan terimin hafıza tutabilir.