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 (' ve ") 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ı ????