Forum
Merhaba arkadaşlar çözemediğim ve anlam veremediğim bir hata ile karşılaştım, değişken içindeki türkçe karakterleri ingilizce uyumlu hala getirmeye çalışıyorm ancak değişkenin içini ben doldurursam sorun olmuyor ama veri tabanından çektiğim veri ile değişkeni doldurursam türkçe karakterler oldugu gibi çıkıyor yine.
function sefyap($baslik)
{
$seo=strtolower($baslik);
$ara = array("ç","Ç","ğ","Ğ","ı","İ","ö","Ö","ş","Ş","ü","Ü"," ",",");
$degis= array("c","c","g","G","i","i","o","o","s","s","u","U","-","");
$seo= str_replace( $ara , $degis, $seo);
return $seo;
}
$r="Şerit Oring"; // elimle yazdığım sürece sorun olmuyor çeviriyor ama veritabanından çektiğim zaman fonksiyon işe yaramıyor.
$q = sefyap($r);
Yardımlarınız için şimdiden teşekkürler.
Veritabanı tablosunda kullandığınız karakter seti nedir?
utf8_general_ci kullanıyorum
PHP sayfalarınızın BOMSUZ utf8 şeklinde kodlandığından emin olunuz birde veritabanına bağlanırken şu komutlarıda çalıştırınız denedikten sonra buraya geri dönüş yapın.
mysql_query("SET NAMES ‘utf8′");
mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET COLLATION_CONNECTION = ‘utf8_general_ci’");
Veritabanı tablosunda kullandığınız karakter seti nedir?
utf8_general_ci kullanıyorum
teşekkür ederim deneyip geri dönüş yapacağım
PHP sayfalarınızın BOMSUZ utf8 şeklinde kodlandığından emin olunuz birde veritabanına bağlanırken şu komutlarıda çalıştırınız denedikten sonra buraya geri dönüş yapın.
mysql_query("SET NAMES ‘utf8′");
mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET COLLATION_CONNECTION = ‘utf8_general_ci’");
Söylediklerinizi yaptım ve kontrol ettim hala aynı sorn devam ediyor.
Ben utf8_unicode_ci karakter setini kullanıyorum genellikle. Şuana kadar geliştdiğim yazılımlarda, url için seo yaptığımda hiç böyle sorunla karşılaşmadım.
general'de de sorun çıkarmaması gerekiyor. İlgili dosyayı ve veritabanını görmediğimden aklıma söyleyecek bir şey gelmiyor bir yerde hata yapıyor olabilir misiniz?
Ben utf8_unicode_ci karakter setini kullanıyorum genellikle. Şuana kadar geliştdiğim yazılımlarda, url için seo yaptığımda hiç böyle sorunla karşılaşmadım.
general'de de sorun çıkarmaması gerekiyor. İlgili dosyayı ve veritabanını görmediğimden aklıma söyleyecek bir şey gelmiyor bir yerde hata yapıyor olabilir misiniz?
Tam olarak yapım bu şekilde ;
<?php
function sefyap($baslik)
{
$seo=strtolower($baslik);
$ara = array("ç","Ç","ğ","Ğ","ı","İ","ö","Ö","ş","Ş","ü","Ü"," ",",");
$degis= array("c","c","g","G","i","i","o","o","s","s","u","U","-","");
$seo= str_replace( $ara , $degis, $seo);
return $seo;
}
$Ar5 = mysql_query("SELECT * FROM Articles where ID=$ID ");
while($ac5=mysql_fetch_array($Ar5))
{
$Isim =$ac5[Name];
}
$q = sefyap($Isim);
?>
ama yinede inatla türkçe geliyor anlam veremedim. Veritabanında optimizasyon için ayrıbir sütunda isim tutmuyorum içeriğin başlığını kullanıyorum.
Şundan kaynaklanabilir
strtolower fonksiyonunu str_replace komutundan sonra şu şekilde kullanın.
mb_strtolower
karakter değişimi yapmadan önce strtolower karakter kodlmasını bozabilir diye düşünüyorum.
yani şu şekilde;
function sefyap($baslik)
{
$ara = array("ç","Ç","ğ","Ğ","ı","İ","ö","Ö","ş","Ş","ü","Ü"," ",",");
$degis= array("c","c","g","G","i","i","o","o","s","s","u","U","-","");
$seo= str_replace( $ara , $degis, $seo);
return mb_strtolower($seo);
}
yani şu şekilde;
function sefyap($baslik)
{
$ara = array("ç","Ç","ğ","Ğ","ı","İ","ö","Ö","ş","Ş","ü","Ü"," ",",");
$degis= array("c","c","g","G","i","i","o","o","s","s","u","U","-","");
$seo= str_replace( $ara , $degis, $seo);
return mb_strtolower($seo);
}
malesef strtolower fonksiyonunu kullanmasam bile aynı hatayı veriyor
Kodlarda bir yanlışlık olmuş doğrusu;
function sefyap($baslik)
{
$ara = array("ç","Ç","ğ","Ğ","ı","İ","ö","Ö","ş","Ş","ü","Ü"," ",",");
$degis= array("c","c","g","G","i","i","o","o","s","s","u","U","-","");
$seo= str_replace( $ara , $degis, $baslik);
return mb_strtolower($seo);
}
Halen olmuyorsa başka bir sorun olmalı acaba türkçe karakterler başka bir şekildemi depolanıyor veritabanında html coding gibi.
Ç |
Ç |
ç |
ç |
Ğ |
Ğ |
ğ |
ğ |
İ |
İ |
ı |
ı |
Ö |
Ö |
ö |
ö |
Ş |
Ş |
ş |
ş |
Ü |
Ü |
ü |
ü |
Kodlarda bir yanlışlık olmuş doğrusu;
function sefyap($baslik)
{
$ara = array("ç","Ç","ğ","Ğ","ı","İ","ö","Ö","ş","Ş","ü","Ü"," ",",");
$degis= array("c","c","g","G","i","i","o","o","s","s","u","U","-","");
$seo= str_replace( $ara , $degis, $baslik);
return mb_strtolower($seo);
}
Halen olmuyorsa başka bir sorun olmalı acaba türkçe karakterler başka bir şekildemi depolanıyor veritabanında html coding gibi.
Ç
Ç
ç
ç
Ğ
Ğ
ğ
ğ
İ
İ
ı
ı
Ö
Ö
ö
ö
Ş
Ş
ş
ş
Ü
Ü
ü
ü
Sizin dediğiniz şekilde yapınca ��erit-oring bu şekilde bir çıktı alıyorum. Olması gereken çıktı serit oring .
return mb_strtolower($seo, "UTF-8");
Şeklinde deneyin bir yerde karakter kodlama hatası var.
return mb_strtolower($seo, "UTF-8");
Şeklinde deneyin bir yerde karakter kodlama hatası var.
Hocam bu seferde şerit-oring olarak çıktı verdi
Bu problem neden kaynaklanabilir şuan için bir fikrim yok. Her şey doğru ise bu olmaması gerekiyor. Bir şey atladım mı diye önceki yazdığım scriptlere bakım ama size söylediğimden farklı bir şey yapmamışım sanırım. mb_detect_encoding($veri) komutuyla sorgudan dönen verinin karakter kodlamasını görebilirsiniz. Türkçe karakter replace fonksiyonundan etkilenmiyorsa problem kodlamadadır diye düşünüyorum eğer pratikte bir hata yapılmadıysa. Çünkü mesela php dosyasında yazdığınız "ç" harfinin kodlaması veritabanından gelen kodlama ile çok farklıysa php onun ç harfi olduğunu algılamaz. Ancak cevaplarından böyle bir sorun olmaması gerektiği anlaşılıyor. Bunun dışında ne olabilir aklıma bir şey gelmiyor.
Bu problem neden kaynaklanabilir şuan için bir fikrim yok. Her şey doğru ise bu olmaması gerekiyor. Bir şey atladım mı diye önceki yazdığım scriptlere bakım ama size söylediğimden farklı bir şey yapmamışım sanırım. mb_detect_encoding($veri) komutuyla sorgudan dönen verinin karakter kodlamasını görebilirsiniz. Türkçe karakter replace fonksiyonundan etkilenmiyorsa problem kodlamadadır diye düşünüyorum eğer pratikte bir hata yapılmadıysa. Çünkü mesela php dosyasında yazdığınız "ç" harfinin kodlaması veritabanından gelen kodlama ile çok farklıysa php onun ç harfi olduğunu algılamaz. Ancak cevaplarından böyle bir sorun olmaması gerektiği anlaşılıyor. Bunun dışında ne olabilir aklıma bir şey gelmiyor.
Yinede teşekkür ederim ilginiz için .