TinyMCE editörde Türkçe karakter sorunu ve çözümü

28 Eylül 2011
Bu yazıyı beğendiysen paylaşmayı unutma :)
Pin It

Yapmış olduğum web projelerinde kullandığım zengin metin editörünü değiştirmeye karar verdim. Bu sebeple internet’te kısa bir araştırma yaptıktan sonra popüler bir editör olan TinyMCE editörünü seçtim ve kullanmaya başladım. Ta ki yediği haltı fark edene kadar..

TinyMCE, buradan da görebileceğiniz gibi Facebook, WordPress, Oracle, Microsoft, Apple, Joomla gibi şirket/ürün -lerin tercih ettiği bir editör. Ben de gerekli kurulumları web uygulamama entegre ettikten sonra kullanmaya başladım. Ancak yaptığım kayıtları Sql Server üzerinden kontrol ettiğimde Türkçe karakterleri olduğu gibi değil, Html varlıkları olarak kaydettiğini gördüm.

Şöyle ki;

İıÜüĞğŞşÇçÖö harfleri İıÜüĞğŞşÇçÖö olarak görüntülüyor.

Yani ÜüÇçÖö harfleri aşağıdaki gibi kodlanıyor.

Ü = Ü
ü = ü
Ç = Ç
Ç = ç
Ö = Ö
ö = ö

TinyMCE’ın wiki sayfasından “entity_encoding” ayarlarını kontrol ettiğimde entity_encoding’in “named”, “numeric” ve “raw” değerlerini aldığını gördüm.

“named” seçeneği varlıkları karakter bazında, örneğin; boşluk karakterini “ ” olarak, “numeric” seçeneği sayısal olarak, örneğin; boşluk karakterini “ ” olarak, “raw” ise XML default varlıkları olan & < > " değerleri dışındaki tüm karakterleri saklaması gerekiyor(du).

Normal şartlar altında “raw” seçeneği sorunu çözmeliydi.. Ancak çözmedi.

Bu sorunun çözümü için ise şunları yapmamız gerekiyor.

Birincisi; TinyMCE’nin wiki sayfasındaki “entities” başlığından default değerleri alıp, web uygulamanızdaki TinyMCE ayarlarınızı yaptığınız “tinyMCE.init” alanına ekleyin. Yalnız bunu yaparken

Ü = Ü
ü = ü
Ç = Ç
Ç = ç
Ö = Ö
ö = ö

karakterleri ve hemen önlerinde bulunan sayısal karşılıklarını temizleyin. Örneğin; “220,Uuml” ya da “252,uuml” gibi. Bu işlemi gerçekleştirdikten sonra TinyMCE ile artık Türkçe karakter probleminizin kalmadığını göreceksiniz.

Benzer Yazılar


DeliPenguen'i Google+'da bulun



  1. 28 Eylül 2011 - 10:01

    Hocam,

    Kolay ve pratik bir çözüm bulmuşsun. Bu çözümü bize sunduğun için teşekkürler, aklına sağlık.

  2. 28 Eylül 2011 - 10:41

    Teşekkürler hocam, beğendiğine sevindim.

  3. Ömer
    3 Aralık 2011 - 20:54

    Hocam bir kez daha teşekkürler.

    • :DeliPenguen
      3 Aralık 2011 - 23:21

      Teşekkürler bizden 😉

  4. burak
    26 Ocak 2012 - 18:56

    tinymce_3.4.7 versiyonunu kullanıyorum.Bende veri tabanına ö yü türkçe kayıt ettiremiyorum.Yazılanları yaptım ama yine olmuyor. Verdiğiniz linkleteki Version: 3.3.8 / default value: yi kendı sayfama kopyalayıp sil dedıklerınızı siliyorum ama aynı sorun devam edıyor.Kodlarımda bi hatamı var bilmiyorum. Siz çalışan kodları yazabılırmısinız acaba

  5. can yumak
    16 Nisan 2012 - 15:42

    çok teşekkür ettim hocam allah razı olsun ya wallahi çok dua ediyorum 3 gündür kafaları yiyecektim, denemediğim yol kalmamıştı.. Tekrar teşekkürler..

  6. :DeliPenguen
    16 Nisan 2012 - 15:45

    Güle güle kullan. 🙂

  7. 17 Nisan 2012 - 11:04

    hocam çok güzel bu sorunu atlattım fakat bugün farkettim ki arama motorunda İSTANBUL yazarsam sadece İSTANBUL olanları buluyor. istanbul olanları bulmuyor keza bu ü,ç,ı,i,ğ,ş karakterlerinin hepsi için geçerli. Orjinali ne ise o şekilde yazmam gerekiyor. Halbuki HUKUK kelimesin büyük yazsam dahi küçük yazılmış hukuk kelimelerini bulabiliyorum. Zira veritabanından gelen ve değişkene atadığım karşılaştırmaları strtolower ile küçültüyorum. fakat bu fonksiyon az öncede bahsettiğim türkçe karakterlerde işe yaramıyor. konudan biraz dışarı çıkıyor fakat yardım edebilirseniz çok sevinirim. tşk.

  8. :DeliPenguen
    17 Nisan 2012 - 12:05

    Selam Can, şimdi bu konuda biraz bilgi vermen gerekiyor. Arama motorunda yaptığın arama Google araması mı? Yoksa site içi arama mı? “Hukuk” kelimesinde Türkçe karakter olmadığın için sorun çıkarmaması normal. “strtolower” dan bahsettiğine göre PHP kullanıyorsun. Fakat bu tarz default fonksiyonlar Türkçe karakterleri olması gerektirdiği gibi çeviremez. Bunun için şurada (http://forum.iyinet.com/php/128478-strtolower-turkce-karakter-problemi.html) olduğu gibi kendi fonksiyonunu yazman gerekir. Bunları bir dene, sonra tekrar konuşalım. Ok?

  9. 17 Nisan 2012 - 13:54

    Merhabalar. Kesinlikle hocam dediğiniz gibi çevirmiyor fakat ben iyinet forumunda tam da link verdiğiniz bölümdeki fonksiyonları da kullandım, malesef onlarda işe yaramadı bu sefer karakter ? olarak çıkıyor. Baştan adam akıllı anlatmam gerekirse; evet php kullanıyorum. Tüm sayfalarım UTF8-Bomsuz olarak kayıtlı Veritabanım tablolarım kolonlarım utf8_general_ci olarak kayıtlı. Okuma sayfaları UTF-8 olarak meta atanmış durumda. Bütün bunların haricinde veritabanı bağlantı dosyamda aşağıdaki karakter seti komutları tanımlı;

    mysql_query(“SET NAMES ‘UTF-8′”);

    mysql_query(“SET CHARACTER SET UTF-8”);

    mysql_query(“SET COLLATION_CONNECTION = ‘utf8_general_ci'”);

    Bütün bunlara rağmen ne yaptıysam türkçe karakterlerde sorun yaşıyorum mesela “Müdür” yazdığımda çıkıyor sonuç zira orjinali öyle fakat “MÜDÜR” olarak arattırdığımda kayıt bulunamadı diyor. Bu arada sayfayı görüntüle dediğimde karakter hatası göremiyorum. Son ama en önemli detay ise sql sorgusunu phpmyadminden yazdığım zaman “müdür” arama kelimesinin büyük küçük her formatını buluyor ve döküyor. Sizce benim sorunum ne olabilir? SSorunu bulamıyorum..

  10. 17 Nisan 2012 - 14:12

    pardon düzeltiyorum phpmyadmin üzerinden sonuç çıkmıyor çıkması da muhtemel değil zaten 🙂

  11. :DeliPenguen
    17 Nisan 2012 - 16:03

    UTF-8 ile ilgili yaptığın ayarlamalar doğru. Sayfanın kendisinin UTF-8 olarak kodlanmış olması lazım. O da doğru mu?

  12. 17 Nisan 2012 - 16:08

    doğrudur o da UTF-8. Dyorumki acaba ben bunların tabloların veritabanınının sayfaların hepsini tekrar latin5-turkish-ci ye çevirsem ve iyinet forumlarındaki fonkisyonu kullanaarak çeksem sorguyu işe yarar mı acaba?

  13. :DeliPenguen
    18 Nisan 2012 - 11:45

    Denemek lazım. Nedir son durumun?

  14. 18 Nisan 2012 - 11:59

    neler denedim anlatmakla sığdıramam buralara…
    mb_case_title diye bir komut denedim.. ucwords denedim..veritabanını utf8 general ci bıraktım sayfaları hürriyetteki gibi 1254 8959-9 ve tr meta taglarıyla donattım.. set names latin5 yaptım zira.. Asi ye çevirdim Utf-8 bomsuz yaptım veritabanında bir hata yok bence hala tinymce editöründe sıkıntı var Daha deniyoruz bakalım.. Sona gelince paylaşıcam inş gelebilirsek..

  15. 19 Nisan 2012 - 11:32

    Merhabalar,,

    utf-8 le başı belada olan arkadaşlar için, belki formattan şaştık biraz ama sonuçta çözüm buldum. Sizlerle de paylaşmak istedim. tüm veritabanınızdaki tablo sütun ve veritabanı utf8_general_ci olduktan sonra TÜM SAYFALARINIZI ( yönetim panelindeki sayfalarda dahil )
    notepad ++ da açarak ANSI formatına çevirin sonra yine aynı sayfalara 8859-9, windows-1254 ve tr content meta taglarını ekleyin. bu sayfalarda kesinlikle ne utf8 meta sı olsun ne de formatı BOMLU veya BOMSUZ utf8 olsun buna dikkat etmelisiniz.. Akabinde veritabanı bağlantı dosyanıza mysql_query( SET NAMES latin5 ) kodunu ekleyin. verilerinizi latin5 olarak çeksin sonra türkçe karakter sorunu yaşadığınız sayfada örneğin ben arama motorunda büyük kğüçük harf sorunu yaşıyordum türkçe karakterleri büyütemiyordum. Bunun sebebi strtolower – upper kimi komutlar türkçe karakterlerde sıkıntı çıkarabiliyor. Bunun için ;

    function upper_tr($str){
    return strtr($str, “abcçdefgğhıijklmnoöpqrsştuüvwxyz”, “ABCÇDEFGĞHIİJKLMNOÖPQRSŞTUÜVWXYZ”);
    }

    fonksiyonunu kullanabilirsiniz..
    örneğğin ben kendi çalışmamda adres çubuğunda gelen değişkeni veritabanı ile karşılaştırmam gerekiyordu.

    $kyw = upper_tr($_GET[kyw];)
    $dbtext = upper_tr($rowfind[text]);

    $can = strstr($dbtext,$kyw);
    if (strstr($dbtext,$kyw))
    {
    echo “”;
    echo ” &nbsp…”.substr($can,0,50).”…”;
    echo “”;
    }

    böylelikle ister büyük harf ile isterse küçük harf ile aratırmış olsun sonuç bulunuyor.

    kimsenin başına gelmemesi ümidiyle gına getiren ve çok yerde yeter artık dedittiren sorunlar arasına girmeyi başarmış 🙂 Olay ise tamamen sayfalarınızın formatı ve kodlamasıyla alakalı..
    umarım işinize yarar.

  16. :DeliPenguen
    19 Nisan 2012 - 13:23

    Hadi bakalım geçmiş olsun 🙂 Bu faydalı bilgileri paylaştığın için de teşekkürler 😉

  17. 15 Ağustos 2012 - 22:08

    Şu eklemeyi yapmadan geçemeyeceğim. tinymce.init alanında çağrılan js dosyalarından sonra yapın bu eklemeyi
    entities : “Ü = Ü ü = ü Ç = Ç Ç = ç Ö = Ö ö = ö”,
    editör arkadaşım bu satırı olduğu gibi koyarsa bir nebze daha faydalı olur diye düşünüyorum.

  18. Merakli
    23 Eylül 2012 - 16:16

    entities:’ ‘,
    şeklinde boşluk koyarak kullanmakta yeterlidir…

  19. Müslüm
    10 Kasım 2012 - 08:44

    Ciddi bir sorun göz ününde bulundurmadığınız şeylerde var.
    Sorunun 2 ÇÖZÜMÜ VAR. ilki hocamın söylediği gibi yapmak. ama bu şekilde yapmanın çok dezavantajlarıda olabiilir. Bir sürü farklı sitesi olan birinin bu sitelerin tamamında sayfalarda manuel güncelleme yapmak zorunda kalması gibi…

    2. Çözüm de tiny mce dosyaları üzerinde değişiklik yapmak. Böylece sıkıntı yaşadığınız sitelere dosyaları sadece upload ederek sorunu çözer sayfalarınızla tek tek uğraşmazsınız.

    tiny_mce.js dosyasını notepad++ yada herhangi bir metin editörüyle açın ve içerisinde 6s,Uuml, yi aratın ve bulduğunuz kısmı yani “6s,Uuml,” silin aynı şekilde 7s,uuml, 77,ccedil, 67,Ccedil, 7m,ouml, 6m,Ouml, bunlarıda bulun ve silin sorun çözülmüş olacaktır…

    Olay sadece tükçe karakter sorunu değil.
    Bu sorun düzeltilmezse
    1. Yeritabanında aramalarda sorun yaşarsınız.
    2. Veritabanınızın yaklaşık olarak %21 ini gereksiz yere kullanmış olursunuz.
    3. Site trafiğiniz gereksiz yere artmış olur buda sayfalarınızın hissedilir derecede olmasada geç açılmasına sebep olur..

    TÜRKÇE KARAKTER SORUNU olan arkadaş kaldımı 😀 ?

    • 5 Ağustos 2013 - 01:40

      Müslüm kardeş senin çözümün daha basit ve hızlı. Ben de aynı çözümü uyguladım. Yeni versiyonlarda raw değeri verilince de hata alıyorsunuz. Çç Öö gibi bi kaç karakter yine html formatta kodlanıyor. Bu yüzden kalıcı çözüm .js dosyanızı düzenlemek ve Müslüm’ün dediği gibi bu kodları silmek. Hem zamandan kazanıyor hem de diğer sitelerinizi sadece .js dosyasını değiştirerek kurtarabiliyorsunuz. Tebrikler.

  20. 19 Aralık 2012 - 16:35

    Yeni versiyonda init yaparken entity_encoding : “raw” yapınca oluyor.

  21. saadet
    22 Kasım 2015 - 03:27

    bu sorun bizde de var ama tinyMCE.init kısmı neresi tam anlayamadım yardımcı olabilirseniz sevinirim.
    saygılarımla