gelis-tr-io / destek

Sorularınız, istekleriniz, ve tavsiyelerinizi burada yapıyoruz...
11 stars 0 forks source link

İlginç bir regex problemi - İngilizce olmayan karakterler bozuluyor. #5

Open hurata opened 5 years ago

hurata commented 5 years ago

Regex ile hashtagleri algılamak ve bunlara link atamak için 'preg_replace' kullandım.

$text = preg_replace('/(?<!\S)#([0-9\p{L}]+)/', '<a href="/hashtag/$1" class="hashtagHref">#$1</a>', $text); 

Direkt çalışan örneği de bu linkte:

https://regex101.com/r/Pquem3/1

Linkte de göründüğü gibi non-english karakterler gayet düzgün bir şekilde çalışıyor ama benim sayfalarımda "��" gibi karakterler çıkarıyor. Sorunun kaynağının sayfa kodlaması olduğunu düşündüm ama sayfalarım utf-8 daha önce bu tarz bir problemle karşılaşmış arkadaşların fikirlerini bekliyor olacağım.

Şimdiden teşekkürler...

hurata commented 5 years ago

@tarikguney hocam sizi bir çağırayım konuya. Konu hakkında umarım bir tecrübeniz vardır.

tarikguney commented 5 years ago

Sayfani gormeden cok birsey demek zor, ama senin de anladigin uzere sorun character encoding/decoding sirasinda gerceklesiyor ve bunun bir kac nedeni olabilir:

  1. Gonderilen response'in ContentType header'i icinde Content-Type: text/html; charset=utf-8 kisminda decode edilmesi icin kullanilacak olan charset, karakterlerin encode edilmesi sirasinda kullanilan encoding'den farkli olabilir. Mesela kullandigin kutuphane farkli bir encoding kullaniyor olabilir.
  2. HTML sayfalarin icinde <meta charset="UTF-8"> kismi kullanilan encoding'den farkli olabilir.
  3. Kullandigin web framework aslinda farkli bir encoding kullaniyor olabilir ve decode UTF8 kullaniyor olman yanlis bir sonuc veriyor olabilir.
  4. Kullandigin dil farkli bir dil kullaniyor olabilir mesela UTF16 gibi. Ornegin C# ta kaynak kodlar UTF16 ile encode ediliyor. Bu farkliligi framework'un kendisi halletmesi gerekiyor olabilir yada manual intervention yapman gerekebilir bir yerlerde.
  5. Browser ayarlarinda bir sorun olabilir. Specific bir encoding'i zorluyor olabilirsin. Bunu daha once cok gormedim ama bakmaktan yarar var. Baska browserlerda aynisi oluyor mu, buna bakabilirsin.

Simdilik aklima gelenler bunlar.

hurata commented 5 years ago

@tarikguney sayfam standart html etiketleri arasına gelen preg replace döngüsü olduğu için eklemeye gerek duymadım. Ama yinede ekleseymişim iyiymiş.

Hocam aslında bende tam verdiğiniz cevap tarzında bir cevap bekliyordum. Verdiğiniz cevaplar arasında olma ihtimali olan ve kontrol etmediğim sadece 3. seçenek var. PhalconPHP framework kullanıyorum ve galiba çıktıyı biraz etkiliyor bu sıkıntıyla alakalı bir kaç başlıkta gördüm. Üzerine bi yoğunlaşayım çok teşekkürler.

Sorunu çözdüğümde çözümü başlık altında yazacağım.