Fonksiyon kaçan alıntı düzgün çalışmıyor

2 Cevap php

Ben bu işlevi düzgün çalışmıyor neden anlamaya çalışıyorum.

Bu benim girişlerini düzenlemek ekstra \ her zaman atıyor.

Online sunucu bu ayarları vardır:

magic_quotes_gpc On 
magic_quotes_runtime Off 
magic_quotes_sybase Off

İşte kod:

function esc($s)
{
  if (get_magic_quotes_gpc()) {
    if (ini_get('magic_quotes_sybase'))
      $s = str_replace("''", "'", $s);
    else
      $s = stripslashes($s);
  } //if 
  return mysql_real_escape_string($s);
}

Edit note:

Ben tamamen ne yaptığını görmek için bu işlevi kaldırarak denedim ... ve aynı şeyi yapar, bu yüzden addslashes de aynı şey için kodu kullanmak olduğunu anlamışlardır.

magic_quote idi ON, çünkü ekstra \ vardı

2 Cevap

Sizin fonksiyonu biraz mantıklı. Sihirli tırnak (örn. giriş kaçtı) üzerinde ise, bunu Unescape. Üzerinde değil ise, bunu kaçış. Yani üzerinde veya sihirli alıntı varsa bağlı olarak, farklı sonuçlar alırsınız.

Her durumda, sihirli tırnak dayanarak gerçekten kötü bir uygulamadır. Sen gerekir:

  1. Disable magic quotes or reverse its effect globally.
  2. Either escape strings SQL sorguları or (daha iyi) oluşturmak zaman use prepared statements.
  3. Not unescape / şerit / ne olursa olsun bir şey Eğer veritabanından geri almak zaman.

Muhtemelen magic_quotes_sybase üzerinde bile stripslashes istiyorum:

function esc($s)
{
    if (get_magic_quotes_gpc()) {
    	if (ini_get('magic_quotes_sybase'))
    		$s = str_replace("''", "'", $s);

    	$s = stripslashes($s);
    } //if 
    return mysql_real_escape_string($s);
}

Ayrıca PHP'nin get_magic_quotes_gpc function sayfasına bir göz atmak isteyebilirsiniz, bölü elimden sağlamak için oldukça şık çözümler sayfada çeşitli kullanıcı yorum vardır.