v2.5.2
Giriş yap

Karakter seti problemi

nizoq
934 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Merhaba

Birden fazla siteden veri çekerken karakter seti problemi yaşıyorum. Tayfun Erbilenin http://www.erbilen.net/php-ile-bir-dosyanin-karakter-kodlamasini-ogrenmek/ buradaki çözümü bazı sitelerde çalışmıyor. Örneğin aksam.com.tr de denerseniz bu koddan UTF-8 dönüyor ancak karakter seti ISO-8859-9 .Dolayısıyla çekilen veriden karakter dönüşümü yapamadığım için problemli karakterler görünüyor.
Birden fazla site olduğu için karakter setlerini otomatik öğrenip convert etmem gerekiyor.

Bu problemi nasıl çözerbilirim ?

Cevap yaz
Cevaplar (8)
shelby
1684 gün önce

Kodlar kötü çıkıyor.
https://prnt.sc/ryfy3a

shelby
1684 gün önce

Denemedim kodunu çünkü her siteden alamazsın böyle desenle. Şöyle bir şeyler yazmalısın.

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.aksam.com.tr/guncel/ozel-araclarda-maske-zorunlulugu/haber-1062920&quot;);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);

//$output = iconv('ISO-8859-9', 'utf-8', $output);

preg_match("~<head>(.*?)</head>~s", $output, $header_match);
preg_match_all("~charset="?([^"]+)"?~", $header_match[1], $matches);

echo "<pre>";
print_r($matches);
echo "</pre>";

nizoq
1684 gün önce

Öylede alamıyorum problem oluyor. Senin verdiğin örnekle denedim sonuç linkteki gibi yine boş dönüyor.
https://hizliresim.com/uSMnRp

Normalde derleyicide sorunsuz alabiliyorum ancak terminal yada tarayıcıda dizi boş dönüyor.

Kodlarıda paylaşayımda, rica etsem birde sen denermisin müsait olunca. Acaba benim xampp sıkıntımı çıkarıyor.

<?php
header('Content-type: text/html; charset=UTF-8');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.aksam.com.tr/guncel/ozel-araclarda-maske-zorunlulugu/haber-1062920&amp;quot&quot;);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);

//$output = iconv('ISO-8859-9', 'utf-8', $output);

preg_match("/^s+?<meta http-equiv="Content-Type" content="text/html; charset=(.*)">(s+)?$/mi", $output, $result);

print_r($result);

shelby
1685 gün önce

Sitenin head tagları içerinden hangi charsetle kodlandığını alan bir fonksiyon yazabilirsin.

nizoq
1685 gün önce

iconv'a parametreyi verince sorun yok hocam sorun zaten sitenin karakter setini alabilmek. Yani akşam.com.tr örnek otomatik olarak sistem sitelere girip içeriğe bakıyor.
Burda sorun her sitenin karakter seti farklı olabilir. Ben bunu otomatik alıp öyle iconv'a vermem lazım.
Yani "echo iconv('ISO-8859-9', 'utf-8', $output);" kısmıdaki 'ISO-8859-9' kısmı; o anki sitenin karakter seti neyse o olması lazım.

shelby
1685 gün önce

Şu kodu çalıştırır mısın? Hata alıyor musun?
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.aksam.com.tr/guncel/ozel-araclarda-maske-zorunlulugu/haber-1062920&quot;);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);

echo iconv('ISO-8859-9', 'utf-8', $output);

nizoq
1685 gün önce

Denedim onuda malesef olmadı.

shelby
1685 gün önce

iconv fonksiyonu işine yarayabilir.
https://www.php.net/manual/tr/function.iconv.php