1. sayfa
Birinci sorum için şöyle birşeyler buldum: htmlentities() - Kullanınca Türkçe karakter sorunu çıkıyor, 'ı', 'ş' gibi harfler değişiyor. Uygun charset parametresini bulamadım bu fonksiyon için. UTF-8 tutmadı, ISO-8859-9 yazdım çalışmadı. html_entity_decode() htmlspecialchars() htmlspecialchars_decode() - Elimdeki PHP versiyonu tarafından desteklenmiyor. Yukarıdaki fonksiyonları kullanınca ortak olarak karşılaştığım sorun şu: tek tırnak ve çift tırnak işaretlerinin yanını bir kaçış karakteri ('\') konuluyor. Her ne kadar ENT_NOQUOTES parametresini kullanmış olsam da işe yaramadı. Lütfen yardım edin. |
İlk soruyu şu şekilde çözdüm: gönderdiğim veriyi önce htmlspecialchars() ile işliyorum. Veritabanına kaydettikten sonra (Veriyi gösterime sokarken) stripslashes() fonksiyonu ile tırnak işaretlerinin etrafındaki kaçış karakterlerini siliyorum.
Not: sanırım ikinci mesajımda belirttiğim hata, sistemimde "magic quotes" özelliği açık olduğu için oluyor. Ancak şimdi onu kapatmak işime gelmiyor. Çünkü sanırım DB query'lerim için gerekli imiş. İkinci sorum hakkında araştırmalarım sürüyor :) Yardımcı olacaklara şimdiden teşekkürler. |
Arkadaşım o tırnaklara kaçış karakteri koymazsa sql enjectiona neden olabilir.O nedenle koyması daha iyidir. daha sonra yazdırırken stripslashes($yazi); gibi yazdırırsın. Girerkende strip_tags kullan strip_tags($yazi); bütün tagları siler strip_tags($yazi, '<br>'); <br> dışındakileri siler yani istediğin tagları yazabilirsin bu şekilde. |
![]()
Yaptığım şeyi biraz açıklığıa kavuşturayım: Ben bir blog sayfası hazırlıyorum ve bu sayfada okuyucuların yorum girmeleri için bir form hazırladım. kullanıcı eğer formda eksik alan bırakırsa, bir hata mesajı alıyor ve orayı doldurması isteniyor. Mesela emailini yazmamış ise buna göre uyarılıyor. Tabi bu arada sayfa reload edilmiş oluyor. Ben de herhangi bir hata oluştuğunda bütün bilgiler tekrar girilmek zorunda kalınmasın diye onları $_GET[] ile tekrar alıp eski yerlerine koyuyorum. Şimdi benim istediğim şey şu: textarea'daki '\n' karakterlerini oldukları şekliyle veritabanına atınca, tekrar geri çekip yorumlar tablosunda gösterirken uygun şekilde göstermiyor. Sanki kullanıcı tek bir satırda yazmış gibi görünüyor. Bunu engellemek için ilk önce str_ireplace() kullanarak bütün '\n' karakterlerini '<br>' yaptım. Ancak böyle olunca da bir hata durumunda textarea'ya ekstradan <br> yazılmış oluyor. (Umarım anlatabilmişimdir.) Gerçi bu durumdan kurtulmanın basit bir yolu var. str_ireplace()'i tekrar kullanarak, bu sefer '<br>'lerin yerine '\n' yazılabilir. Ancak bu işin daha otomatik bir yolu olduğunu sanıyordum ben. Eğer bulamazsam yine bu şekilde yapmayı deneyeceğim. İlgin için teşekkür ederim. ![]() |
ilk önce sayfayi geri çağı history.go(back) diye ozaman zaten şifreli bölüm haricindekiler geri gelecektir ? bu olmazsa geçici bir veri tabanı oluştur. oraya yazdır hata varsa ordan okutarak veri ata ? |
Tamamdır o da :) Veritabanına kaydetmeden önce "\n" -> "<br>" değişikliğini yapmıyorum. Sadece gösterim sırasında yapıyorum bunu. ![]() |
senin işini nl2br($yazi) görür o zaman, bu fnksiyon \n leri <br> ye çevirir yazdırırken. yalnız şunu söyleyim , eğer içinde \n geçen yerleri tek tırnak içinde yazdırıyorsan aynen yazar.Fakat çift tırnak içinde olursa php yorumlar ve boşluk atar. Yani $text="Buraya isteğinizle ilgili açıklamayı\n\n\n yazabilirsiniz." şeklinde olursa yazabilirsiniz üç satır altta çıkar textarea da fakat $text='Buraya isteğinizle ilgili açıklamayı\n\n\nyazabilirsiniz.'; ise aynen çıkar. istediğin yolu kullan,bir de windows sunucularda \n yerine \r\n kullanman gerekir bazı yerlerde unutma Birde benden tavsiye verileri GET ile tutacağına sessionda tut daha güzel olur, hem çirkin görünmez.Birde ilk doğrulama kısmını javascript ile yaparsan boşu boşuna geri dönmeye gerek kalmaz, tabii güvenlik için php ile de doğrulama yaparsın fakat kötü niyetli olmayan için zaten jscript uyarı verir. |
Teşekkürler bu daha derli toplu durdu.[;')]
Sanırım tam olarak anlamadım demek istediğin şeyi. Ben şu şekilde yapıyorum: <?=$query_result_row[0]?>
GET demişim, POST olacak doğrusu. ![]() Javascripti de ilerki safhalarda eklemeyi düşünüyorum. Ama herşeyi javascripte bırakmak uygun değil diye düşünüyorum. ![]() |
Bir de gitmeden şunu sorayım. Diyelim bir adam yorum olarak 1000 tane 'h' karakteri girdi. ('h' karakterinin özel bir durumu olduğu için söylemiyorum herhangi bir karakter girdi diyelim, aralıksız, çok sayıda.) bu durumda gösterime girildiği zaman yorumların altalta konulduğu tablo şişiyor. ben bu tablonun şişmesini istemiyorum. mümkünse "wrap" özelliği gibi birşey istiyorum. Bunun pek PHP ile alakası yok sanırım. ama yardımcı olabilirsen sevinirim. |
php de wordwrap var bunun için $text=wordwrap($text, 20, '<br />',1); $text değişkenini 20 karakterde bir verdiğin karakterle böler burada <br> ile bölüyoruz istersen onun yerine \n kullanabilirsin. Üçüncü değişken yani 1 true veya false değeridir, eğer yazı aralıksızsa da böler.Yani $text='deneme birrrrrrrrrrrrrrrr iki üç'; olsun $text=wordwrap($text, 20, '<br />'); deneme <br> birrrrrrrrrrrrrrrr iki üç yazarken $text=wordwrap($text, 20, '<br />',1); deneme birrrrrrrrrrr <br> rrrrr iki üç yapar |
Harika! Çok teşekkürler. ![]() |
1. sayfa
Hazırladığım web sayfasında kullanıcıların <textarea> veya <text> alanlarından girecekleri muhtemel HTML etiketlerini nasıl etkisiz hale getirip PHP tarafından düz yazı olarak algılanmalarını sağlayabilirim? Bunun kolay bir yolu var mı, yoksa gönderilen değeri kendim inceleyip '<' ve '>' karakterleri için önlem mi almalıyım?
İkinci bir sorum da şu: Kullanıcıya bir textarea veriyorum ve oraya yazdığı yorumları mysql veritabanıma gönderiyorum. Daha sonra bu bilgileri php kullanarak bastırıyorum. Ancak kullanıcının girmiş olduğu enter(newline) karakterleri kaybolmuş oluyor. Bunu nasıl engellerim?
Yardımlarınız için şimdiden teşekkür ederim.
[Değiştir]
Şu aşağıdaki kodları yazdım. Sizce bunlar ilk sorumu tamamen çözümler mi, gözümden kaçan birşey var mı?
Not: &'lerden sonra birer boşluk bıraktım çünkü donanımhaber onları da çeviriyordu. Asıl kodda o boşluklar yok.
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
< Bu mesaj bu kişi tarafından değiştirildi un.real -- 4 Şubat 2006 18:43:02 >