Forum

PHP str_replace hat...
 
Bildirimler
Hepsini Temizle

PHP str_replace hatası

18 Yazılar
2 Üyeler
0 Reactions
2,071 Görüntüleme
(@mesutsari)
Gönderiler: 16
Eminent Member
Konu başlatıcı
 

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. 

 
Gönderildi : 24/03/2014 15:39

(@AkinDemircan)
Gönderiler: 117
Estimable Member
 

Veritabanı tablosunda kullandığınız karakter seti nedir?

 
Gönderildi : 24/03/2014 16:01

(@mesutsari)
Gönderiler: 16
Eminent Member
Konu başlatıcı
 

utf8_general_ci  kullanıyorum 

 
Gönderildi : 24/03/2014 16:08

(@AkinDemircan)
Gönderiler: 117
Estimable Member
 

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’"); 

  

 
Gönderildi : 24/03/2014 16:12

(@mesutsari)
Gönderiler: 16
Eminent Member
Konu başlatıcı
 

Veritabanı tablosunda kullandığınız karakter seti nedir?

 

utf8_general_ci  kullanıyorum  

 
Gönderildi : 24/03/2014 16:12

(@mesutsari)
Gönderiler: 16
Eminent Member
Konu başlatıcı
 

teşekkür ederim deneyip geri dönüş yapacağım

 
Gönderildi : 24/03/2014 16:14

(@mesutsari)
Gönderiler: 16
Eminent Member
Konu başlatıcı
 

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. 

 
Gönderildi : 24/03/2014 16:17

(@AkinDemircan)
Gönderiler: 117
Estimable Member
 

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? 

 
Gönderildi : 24/03/2014 16:27

(@mesutsari)
Gönderiler: 16
Eminent Member
Konu başlatıcı
 

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.

 
Gönderildi : 24/03/2014 16:39

(@AkinDemircan)
Gönderiler: 117
Estimable Member
 

Ş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.

 
Gönderildi : 24/03/2014 16:45

(@AkinDemircan)
Gönderiler: 117
Estimable Member
 

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);

                        } 

 
Gönderildi : 24/03/2014 16:48

(@mesutsari)
Gönderiler: 16
Eminent Member
Konu başlatıcı
 

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

 
Gönderildi : 24/03/2014 16:50

(@AkinDemircan)
Gönderiler: 117
Estimable Member
 

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.

Ç

&Ccedil;

ç

&ccedil;

Ğ

Ğ

ğ

ğ

İ

İ

ı

ı

Ö

&Ouml;

ö

&ouml;

Ş

Ş

ş

ş

Ü

&Uuml;

ü

&uuml;

 

 
Gönderildi : 24/03/2014 16:59

(@mesutsari)
Gönderiler: 16
Eminent Member
Konu başlatıcı
 

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.

Ç

&Ccedil;

ç

&ccedil;

Ğ

Ğ

ğ

ğ

İ

İ

ı

ı

Ö

&Ouml;

ö

&ouml;

Ş

Ş

ş

ş

Ü

&Uuml;

ü

&uuml;

 

 

 

Sizin dediğiniz şekilde yapınca ��erit-oring bu şekilde bir çıktı alıyorum. Olması gereken çıktı serit oring .

 
Gönderildi : 24/03/2014 17:16

(@AkinDemircan)
Gönderiler: 117
Estimable Member
 

return mb_strtolower($seo, "UTF-8");

 

Şeklinde deneyin bir yerde karakter kodlama hatası var.

 
Gönderildi : 24/03/2014 17:23

(@mesutsari)
Gönderiler: 16
Eminent Member
Konu başlatıcı
 

return mb_strtolower($seo, "UTF-8");

 

Şeklinde deneyin bir yerde karakter kodlama hatası var.

 

Hocam bu seferde şerit-oring olarak çıktı verdi  

 
Gönderildi : 24/03/2014 17:38

(@AkinDemircan)
Gönderiler: 117
Estimable Member
 

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.

 
Gönderildi : 24/03/2014 18:09

(@mesutsari)
Gönderiler: 16
Eminent Member
Konu başlatıcı
 

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 . 

 
Gönderildi : 24/03/2014 18:17

Paylaş: