Karakter seti problemi
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 ?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (8)
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");
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>";
Ö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&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);
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.
Ş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");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo iconv('ISO-8859-9', 'utf-8', $output);
iconv fonksiyonu işine yarayabilir.
https://www.php.net/manual/tr/function.iconv.php