UTF8 yada ANSI Sayfalarda Türkçe Karakter Sorunu

Sorun: Web sayfamın meta etiketiyle kodlamasını UTF 8 olarak ayarladığımda veritabanından çektiğim yazılar doğru görünüyor fakat sol menüdeki türkçe karakterler bozuluyor. Yada meta etiketini ISO-8859-9 girince bu sefer de sol menüdeki karakterler düzeliyor ama iç sayfadaki karakterler bozuluyor!
Çözüm: Eğer UTF8 kullanıcaksanız 1. Veritabanınız, 2. Sayfalardaki meta etiketleriniz, 3. Web sayfalarınızı kaydederken dosya kodlaması olarak hepsinde UTF8 kullanmalısınız.
              Yok eğer UTF8 kullanmıyorsanız ve yukarıda belirttiğim gibi sayfanın kenarında sorun var iç kısmında sorun yok gibi problem varsa; sorun olan sayfayı bir editörde açarak dosya kodlamasını değiştirin. Örneğin bozuk dosyanın kodlaması UTF8 ise bunu ANSI olarak değiştirin. Yada yeni bir sayfaya içindeki kodları kopyala yapıştır ile alın. Çünkü yeni sayfalar genelde ilk kayıt türü olarak ANSI kodlaması ile kaydedilir.

PHP ve Mysql Türkçe Karakter Sorunu

ADIM ADIM LATIN5 VE UTF-8 YÖNTEMLERİ
Select veya LIKE gibi komutları kullanarak MYSQL veritabanından bilgi çekerken, ÇĞİÖÜ çğıöü gibi harflerde hatalar çıkıyor. Bunun için en beğendiğim yöntemleri seçtim. Genelde 2 yöntem var. 1. yöntem LATIN5'i seçmek. 2. yöntem UTF-8'i seçmek. UTF-8 bütün dilleri kapsadığı için daha geçerli bi yöntem. Fakat ben ve forumlarda belirten bazı arkadaşlar bazen UTF-8'de her istediğimizi yapamadık. Bu nedenle uygulamanıza göre siz karar verebilirsiniz. İpucu olarak şunu söyleyebilirim. Eğer yapacağınız uygulama sadece TÜRKÇE olacak ve Facebook gibi başka dillere de hizmet vermeyecekse LATIN5'i seçebilirsiniz. Genel bi uygulamaysa UTF-8 daha uygundur.
Gelelim bu yöntemlere:
YÖNTEM 1 (LATİN5):
1- Mysql tablonuzun özelliklerinden karakter setini latin 5, karşılaştırmayı da latin5_turkish_ci olarak seçin. Sadece tabloyu ayarlamak yeterlidir. Ayrıca veritabanının yada tablo bileşenlerinin özelliklerini değiştirmeye gerek yoktur. Zaten bileşenler tablo değişince otomatik olarak latin5 olacaktır.
2-Php de sayfaların head kısımları arasına şu meta etiketini ekleyin:
meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9">
3- Tablomuzu ve Sayfalarımızı latin5 olarak ayarladıktan sonra bir işlem kaldı. O da veritabanından veri çekerken de latin5 olarak çekmek. Bunun için şu kodu veri tabanı bağlantısından hemen sonraya ekleyin, yani şu şekilde:
?php
$baglan
= mysql_connect('localhost','user','pass',TRUE);

mysql_selectdb('db',
$baglan);

mysql_set_charset('latin5',
$baglan);
?>
Bu konuyu araştırdığınızda bu tek satırlık kodun bazı sitelerde 3 satır olarak verildiğini göreceksiniz fakat buna gerek yoktur, bu hali yeterli ve doğru kullanımdır (Bkz: php.net)
YÖNTEM 2 (UTF-8):
1- Mysql tablonuzun özelliklerinden karakter setini utf8, karşılaştırmayı da utf8_general_ci olarak seçin. Sadece tabloyu ayarlamak yeterlidir. Ayrıca veritabanının yada tablo bileşenlerinin özelliklerini değiştirmeye gerek yoktur. Zaten bileşenler tablo değişince otomatik olarak utf8 olacaktır.
2-Php de sayfaların head kısımları arasına şu meta etiketini ekleyin:
meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
3-Editörünüzde php dosyanızı kaydederken Kodlama kısmını utf-8 olarak seçin.
3- Tablomuzu ve Sayfalarımızı utf8 olarak ayarladıktan sonra bir işlem kaldı. O da veritabanından veri çekerken de utf8 olarak çekmek. Bunun için şu kodu veri tabanı bağlantısından hemen sonraya ekleyin, yani şu şekilde:
?php
$baglan
= mysql_connect('localhost','user','pass',TRUE);

mysql_selectdb('db',
$baglan);

mysql_set_charset('utf8',
$baglan);
?>
Bu konuyu araştırdığınızda bu tek satırlık kodun bazı sitelerde 3 satır olarak verildiğini göreceksiniz fakat buna gerek yoktur, bu hali yeterli ve doğru kullanımdır (Bkz: php.net)

TÜRKÇE KARAKTERLERİN HTML ve ASCII KARŞILIKLARI
HTML KARŞILIKLARI:
Ü <=> Ãœ
Ş <=> ÅŸ
Ğ <=> ÄŸ
Ç <=> Ç
İ <=> Ä°
Ö <=> Ö
ü <=> ü
ş <=> ÅŸ
ğ <=> ÄŸ
ç <=> ç
ı <=> ı
ö <=> ö
ASCII KARŞILIKLARI:
ç <=> & #231;
ı <=> & #305;
ğ <=> & #287;
ö <=> & #246;
ş <=> & #351;
ü <=> & #252;
Ç <=> & #199;
İ <=> & #304;
Ğ <=> & #208;
Ö <=> & #214;
Ş <=> & #350;
Ü <=> & #220;
ascii karakter tablosunun hepsi için tıklayın

Diyelimki herşeyi yaptınız ama yine de sayfalarınızda veritabanından çektiğiniz bilgiler bozuk çıkıyo. O zaman yukarıda verdiğim kodlar aracılığıyla PHP sayfalarınızda bazı replace fonksiyonlarını kullanarak bozuk çıkan karakterleri ekrana vermeden önce düzeltebilirsiniz. Kendi kullandığım örnek bi fonksiyon şöyle:
function karakter_tr($text)
{
$text = trim($text);
$search = array('Ð','Þ','Ý','Ä°');
$replace = array('Ğ','Ş','İ','İ');
$new_text = str_replace($search,$replace,$text);
return $new_text;
}
Bu fonksiyondaki $search ve $replace değişkenlerine aynı hizada olmak şartı ile istediğiniz karakteri ve html-ascii karşılığını ekleyebilirsiniz.

PHP ve Jquery ile Google suggest benzeri AutoComplete | Otomatik Metin Tamamlama Hazırlamak

Hazırladığınız web sitelerindeki arama kutuları için Google veya Facebook benzeri bir otomatik metin tamamlama özelliği kullanmak isterseniz şu 2 siteyi örnek olarak inceleyebilirsiniz:

http://www.zskblog.com/detay.aspx?id=41

http://loopj.com/2009/04/25/jquery-plugin-tokenizing-autocomplete-text-entry/

Tarayıcıya Göre Yönlendirme Yapmak – Php

Bazen eski versiyon tarayıcı kullananlara gıcıklık yapmak için, bazen mobile tarayıcıları sitemizin mobile sürümüne yönlendirmek için tarayıcıya yada tarayıcı sürümüne göre yönlendirme yapmaya ihtiyaç duyarız. Ben de bu iki nedenden dolayı biraz araştırdım sonunda güzel bir php nesnesine ulaştım. Yeni işletim sistemini, tarayıcıyı, sürümünü, arama motoru botlarını tanıyabilen bir nesne…

Tipik kullanımı şu şekilde:

include 'browser.php';
$browser = new Browser();
$tarayici = $browser->getBrowser();
$tarayici_ver = $browser->getVersion();

Gördüğünüz gibi ilk önce Browser nesnemizin bir kopyasını oluşturuyoruz daha sonra da $browser->getBrowser() ile browser türünü,
$browser->getVersion() ile de browser versiyonunu alabiliyorsunuz. Bunlardan başka getPlatform() fonksiyonuyla işletim sistemini, isRobot fonksiyonuyla gelenin bir bot olup olmadığını, isMobile() fonksiyonuyla gelenin mobil bir tarayıcıdan gelip gelmediğini öğrenebilirsiniz. Daha birçok fonksiyonu var. Fonksiyonlarını dosyanın 184. satırından itibaren açıklayarak tanımlamış inceleyip kullanabilirsiniz…

Browser.php dosyasını burdan indirebilirsiniz.

Son olarak kullanacağınız bazı fonksiyonların döndürdüğü değerler için aşağıdaki listeden yardım alabilirsiniz.

İşletim sistemleri için getPlatform() fonksiyonunun döndürdüğü değerler:

Windows (Browser::PLATFORM_WINDOWS)
Windows CE (Browser::PLATFORM_WINDOWS_CE)
Apple (Browser::PLATFORM_APPLE)
Linux (Browser::PLATFORM_LINUX)
OS/2 (Browser::PLATFORM_OS2)
BeOS (Browser::PLATFORM_BEOS)
iPhone (Browser::PLATFORM_IPHONE)
iPod (Browser::PLATFORM_IPOD)
BlackBerry (Browser::PLATFORM_BLACKBERRY)
  • Windows (Browser::PLATFORM_WINDOWS)
  • Windows CE (Browser::PLATFORM_WINDOWS_CE)
  • Apple (Browser::PLATFORM_APPLE)
  • Linux (Browser::PLATFORM_LINUX)
  • OS/2 (Browser::PLATFORM_OS2)
  • BeOS (Browser::PLATFORM_BEOS)
  • iPhone (Browser::PLATFORM_IPHONE)
  • iPod (Browser::PLATFORM_IPOD)
  • BlackBerry (Browser::PLATFORM_BLACKBERRY)

Tarayıcılar için getBrowser fonksiyonunun döndürdüğü değerler:

  • Opera (Browser::BROWSER_OPERA)
  • WebTV (Browser::BROWSER_WEBTV)
  • NetPositive (Browser::BROWSER_NETPOSITIVE)
  • Internet Explorer (Browser::BROWSER_IE)
  • Pocket Internet Explorer (Browser::BROWSER_POCKET_IE)
  • Galeon (Browser::BROWSER_GALEON)
  • Konqueror (Browser::BROWSER_KONQUEROR)
  • iCab (Browser::BROWSER_ICAB)
  • OmniWeb (Browser::BROWSER_OMNIWEB)
  • Phoenix (Browser::BROWSER_PHOENIX)
  • Firebird (Browser::BROWSER_FIREBIRD)
  • Firefox (Browser::BROWSER_FIREFOX)
  • Mozilla (Browser::BROWSER_MOZILLA)
  • Amaya (Browser::BROWSER_AMAYA)
  • Lynx (Browser::BROWSER_LYNX)
  • Safari (Browser::BROWSER_SAFARI)
  • iPhone (Browser::BROWSER_IPHONE)
  • iPod (Browser::BROWSER_IPOD)
  • Google’s Android(Browser::BROWSER_ANDROID)
  • Google’s Chrome(Browser::BROWSER_CHROME)
  • GoogleBot(Browser::BROWSER_GOOGLEBOT)
  • Yahoo!’s Slurp(Browser::BROWSER_SLURP)
  • W3C’s Validator(Browser::BROWSER_W3CVALIDATOR)
  • BlackBerry(Browser::BROWSER_BLACKBERRY)

Kolay gelsin…

Bu yazı Alıntıdır. Mesajı yazan www.karasancak.net'e teşekkürler.

Hazır Verilerle Otomatik PDF Oluşturma


Bu yazı Excel'deki verilerin çekilerek otomatik olarak bir PDF oluşturma işlemini anlatıyor. Fakat siz bu işlemi veritabanından bilgi çekerek de yapabilirsiniz. Böylece bu işlemi web sayfalarınızda da kullanabilirsiniz.

Diyelim ki elimde bir PDF şablon var ve bu şablona göre 300 kişinin isim ve soyadını kullanarak 300 tane PDF dosyası oluşturmam gerekiyor. Normal işlem, PDF şablon açılır, teker teker isimler kopyalanıp, yapıştırılır ve üretilen PDF dosyası saklanır. Bu proje için otomatik bir yol buldum ve belki günün birinde size de lazım olur diye paylaşayım dedim.

Diyelim ki elinizde bir PDF şablonunuz (örneğin yemek, parti, doğum günü davetiyesinden oluşmuş bir PDF dosyası) ve bir dolu isim ve e-mailden oluşan bir Excel dosyanız var.

Öncellikle Excel dosyanızı, txt dosyası olarak yeniden kayıt edin (örneğin veri.txt) ve aşağıda görülen bir veri dosyası oluşturun:

isim soyad

Ali Veli

Mehmet Saricizmeli


Daha sonra, PDF şablonunuzu açın ve yukarıdaki verilerin görünmesi gereken yerlere PDF Form araçları sayesinde Textbox oluşturun. Textbox'in ismi ile veri dosyanızdaki sütun başlıklarının uyuşmasına dikkat edin.

Textbox ile süslediğiniz bu yeni PDF şablonu veri dosyası (veri.txt) ile aynı klasör içine saklayın ve daha sonra Adobe Acrobat içinde şablonunuz açıkken Ctrl+J'ye basıp, Acrobat Console'u ekrana çağırın ve aşağıda gördüğünüz JavaScript'i kopyalayıp, yapıştırın.
var targetDirectory ="/C/Temp/Sonuc/";
var re = /\.pdf$/i;
var filename = this.documentFileName.replace(re,"");
var i = 0, retn = 0;
while( retn == 0 ) {
retn = this.importTextData("veri.txt", i);
var f = this.getField("soyad");
if ( retn == 0 ) {
try {
this.extractPages({
nStart: 0,
cPath: targetDirectory + f.value + ".pdf"
});
} catch (e) { console.println("Aborted: " + e) }
i++;
}
}
Hepsi bu kadar! Ctrl+A'ya basıp, bütün kodu secili hale getirip, Ctrl+Enter'a basın. Voila! 300 tane PDF dosyası, isim ve email adresleri gereken yerlere yazılmış şekilde sizi bekliyor.

Yukarıda kod içinde değiştirebileceğiniz kısımlar:

var targetDirectory kısmı, bu scripte, üretilecek PDF dosyalarının saklanacağı dizini tanımlıyor.

this.importTextData("veri.txt", i); ise veri dosyanızı ismini taşıyor.

this.getField("soyad"); kısmı ise, bu dosyaların nasıl isimlendirileceğini tanımlıyor.

Verdiğimiz örnek içinde, üretilen dosyalar, veri dosyanız içinde bulunan "soyad" sütunundaki verileri kullanarak isim verecek, örneğin "Veli.pdf".

Umarım günün birinde, bu scriptin size de yardımı dokunur.

Bu yazı Alıntıdır. Mesajı yazan Mehmet Doğan'a teşekkürler.

EasyPHP 5.3.x ile Mysql ve PhpMyAdmin Bağlantı Hatası

EasyPHP 5.3.2, EasyPHP 5.3.1 yada EasyPHP'nin son versiyonlarında eskiden çalışan mysql bağlantılarınızda (mysql_connect) şöyle bir hata alıyorsanız:

Warning: mysql_connect() [function.mysql-connect]: [2002] Bağlanılan uygun olarak belli bir süre içinde yanıt vermediğinde (trying to connect via tcp://localhost:3306) in C:\Program Files\EasyPHP\www\baglan.php on line 17

Warning: mysql_connect() [function.mysql-connect]: Bağlanılan uygun olarak belli bir süre içinde yanıt vermediğinden veya kurulan bağlantı bağlanılan ana bilgisayar yanıt vermediğinden bir bağlantı kurulamadı. in C:\Program Files\EasyPHP\www\
baglan.php on line 17

Fatal error: Maximum execution time of 30 seconds exceeded in C:\Program Files\EasyPHP\www\
baglan.php on line 17
çözümü burada:
$link = mysql_connect("localhost","root","");


şeklindeki bağlantı satırınızı

$link = mysql_connect("127.0.0.1","root","");

şeklinde değiştirin.

Not: Eğer phpmyadmin'de çalışmıyor ve beyaz sayfa görünüyorsa aynı işlemi phpmyadmin ayarlarından yapmalısınız. phpmyadmin/config.inc dosyasındaki 18. satırdaki localhost yerine 127.0.0.1 yazmalısınız.

PHP Server Saatini Türkiye İçin Uyarlama

Eğer php kullanıyorsanız ve server saatiniz hatalı çıkıyorsa, büyük ihtimalle server'ınız başka bir ülkededir ve bundan dolayı saat ya ileri yada geri çıkıyordur. Çözümü çok basit:

  • Saat komutlarının olduğu bütün sayfaların başına şu kodu ekleyin, işte bu kadar:
date_default_timezone_set('Europe/Istanbul');

  • Yukarıdaki yöntem en basiti ama başka çözüm yollarıda var. Şu komutuda sayfalara ekleyebilirsiniz:
putenv("TZ=Europe/Istanbul");

  • Yada üçüncü ve uzun yöntemle şu kodları kullanabilirsiniz:
$fark = "7";
$saatfark = (date("H") + ($fark));
$zaman1 = mktime( $saatfark, date("i"), date("s"), date("m"), date("d"), date("Y"));
$tarih = date("Y-m-d",$zaman1);
$zaman = date("H:i:s",$zaman1);
echo $zaman ;

Kaynak: http://www.megabul.com