Php Tırnak Sorunu ve Çözümü

Merhaba arkadaşlar, php’de tırnak sorunu olduğu bir gerçek.. Ve bu sorunla uzun süredir karşılaşıyorum, bir şekilde görmezden gelsem de son hazırladığım sistemde artık kesin bir çözüm bulmalı dedim ve o kadarda zor olmayan bir çözüm buldum 🙂 Şimdi ne yapacağız bir inceleyelim..

İlk olarak sorunu tanımlayalım;
Yazılarımız içerisinde (özellikle input içine yazdırdığımız değerlerde) tırnak olursa, o tırnaktan sonraki kısım gözükmüyor.. Yani kısaca input’da value=”” şeklinde yazarsak çift tırnaktan sonrası value=” şeklinde yazarsak da tek tırnaktan sonrası gözükmüyor..

Sorunun çözümü;
Verileri kayıt ederken içerisindeki tek ve çift tırnakları replace edeceğiz.. Tırnak kodları aşağıdadır;
Tek Tırnak (‘) => '
Çift Tırnak (“) => "

Replace edeceğimiz fonksiyonu oluşturalım..

function tirnak_replace ($par)
{
	return str_replace(
		array(
			"'", "\""
			),
		array(
			"'", """
		),
		$par
	);
}

Evet replace eden fonksiyonumuzu oluşturduk.. Bunu array_map ile post metodu ile gönderdiğimiz her veriye uygulayalım;

array_map("tirnak_replace", $_POST)

Tamamdır, artık post ile veri gönderirken, tırnaklarınız tırnak kodu olarak replace edilecek yani değiştirilecektir.

Not: Sef link fonksiyonu kullanıyorsanız, bu şekilde replace ettiğinizde link yapısında bazı sorunlar olabilir.. Örneğin quot ya da 39 gibi değerler eklenebilir.. Bunun olmaması için sef link fonksiyonunuz içinde yukarıdaki iki kodu (&#39 ve &quot) null olarak replace etmelisiniz..


Örnek Sef Link Fonksiyonu;

function sef_link($baslik)
{
	$baslik = str_replace(array(""","'"), NULL, $baslik); // tırnaklar için replace
	$bul = array('Ç', 'Ş', 'Ğ', 'Ü', 'İ', 'Ö', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı', '-');
	$yap = array('c', 's', 'g', 'u', 'i', 'o', 'c', 's', 'g', 'u', 'o', 'i', ' ');
	$perma = strtolower(str_replace($bul, $yap, $baslik));
	$perma = preg_replace("@[^A-Za-z0-9\-_]@i", ' ', $perma);
	$perma = trim(preg_replace('/\s+/',' ', $perma));
	$perma = str_replace(' ', '-', $perma);
	return $perma;
}

Hadi hayırlı olsun, artık böyle bir derdiniz kalmadı 🙂

Yayınlayan

Tayfun Erbilen

2009’dan beri web işleriyle uğraşan, aynı zamanda amatör müziklede ilgilenen sıradan birisi..

“Php Tırnak Sorunu ve Çözümü” üzerine 11 yorum

  1. tırnak sorunu "magic quotes gpc" ayarı kapalı hostlarda yaşanır. bu ayar fonksiyonu aslında default olarak yüklüdür fakat aktif etmek gerekir. benim yıllardır kullandığım bir fonksiyon bu sorunu çözmekte.

    if (get_magic_quotes_gpc()) {
        function tirnak($veri)
        {
            $veri = is_array($veri) ? array_map('tirnak', $veri) : stripslashes($veri);
            return $veri;
        }
    
        $_POST = array_map('tirnak', $_POST);
        $_GET = array_map('tirnak', $_GET);
        $_COOKIE = array_map('tirnak', $_COOKIE);
        $_REQUEST = array_map('tirnak', $_REQUEST);
    }

    kodunu tüm sayfalarda dahil olan bir include içine yazarsanız tırnak sorunu yaşamazsınız.

  2. Aslında inputtayken htmlentities($degisken, ENT_QUOTES, "UTF-8"); şeklinde geçirip post edildikten sonra html_entity_decode($degisken, ENT_QUOTES,"UTF-8"); geçirince sorun falan kalmıyor 🙂

    Güzel yazı oldu bilmeyenlerde bişeler öğrenir ellerine sağlık 🙂

  3. Abi tamam da şöyle yaparsak da o sorun çözülüyor.
    addslashes($_POST["postedilennesne"]);

  4. Mete Türkdönmez,
    o şekilde verileri eklerken sorunu çözüyorsun evet doğru.. Ancak veriyi düzenlemek için input'a eklediğinde çift tırnak varsa input'un value değerinide çift tırnak ile açmışsan yazdırdığında ne demek istediğimi anlayacaksın 🙂 Sonuçta yazdırırken başındaki tersh slashı kaldırmak için stripslashes koyman gerekecek.

  5. Fatih SARAÇ,

    Merhaba, sizin kodu include ettim ve tırnaklarda biraz düzeldi gibi. Benim sorunum tırnak işaretten önce / çıkıyordu. Örnek: /" gibi

    Sizin kodu ekledikten sonra / işareti çıkmamaya başladı, fakat sitemaptaki hata hala devam ediyor. Yani eğer linklerde sitemap varsa veya konu başlığında, sitemap hata veriyor. tırnakları sildiğimde hata vermiyor. bu sorunu nasıl çözeriz? teşekkürler

  6. kardeş sen çok yaşa. senin bir botun sayesinde çok işler yaptım.
    çalışmalarının devamı ve başarılar dilerim;

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir