lostyazilim
tr.link

Text dosyasından veri çekerken türkçe karakter hatası veriyor

2 Mesajlar 349 Okunma
lstbozum
tr.link

autolas autolas WM Aracı Kullanıcı
  • Üyelik 20.11.2023
  • Yaş/Cinsiyet 40 / E
  • Meslek lastikci
  • Konum Aksaray
  • Ad Soyad G** T**
  • Mesajlar 4
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)

Sadece bu harflerde ( ı_ş_ğ )  ( I_İ_Ş_Ğ ) küçük büyük harflerde hata veriyor.

Mysql veri tabanı "utf8_turkish_ci" bir çok dillerde test yaptım değişmedi yine seçili verileri metin text dosyasından çekiyor.

İçerik ekleme çekme php dosyasında sorun olduğunu düşünüyorum bazı eklemeler yapmama rağmen sonuç aynı değişmiyor.

 

<?php
$host = "localhost";
$dbname = "xxxxx";
$username = "xxxxx";
$password = "xxxxx";
try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Veritabanı hatasi" . $e->getMessage());
}
$dosyaAdi = "veriler.txt";
try {
    $dosya = fopen($dosyaAdi, "r");
    while (!feof($dosya)) {
        $satir = fgets($dosya);
 
        if (!empty($satir)) {
            $stmt = $pdo->prepare("INSERT INTO makale (adi) VALUES (:deger)");
            $stmt->bindParam(':deger', $satir);
            $stmt->execute();
        }
    }
    fclose($dosya);
    echo "eklendi";
} catch (Exception $e) {
    echo "eklenmiyor" . $e->getMessage();
}
?>
 

 

wmaraci
reklam

OFffLaZZzz OFffLaZZzz WM Aracı Kullanıcı
  • Üyelik 16.06.2023
  • Yaş/Cinsiyet 40 / E
  • Meslek Esnaf
  • Konum Trabzon
  • Ad Soyad M** K**
  • Mesajlar 28
  • Beğeniler 10 / 13
  • Ticaret 0, (%0)

autolas adlı üyeden alıntı

Sadece bu harflerde ( ı_ş_ğ )  ( I_İ_Ş_Ğ ) küçük büyük harflerde hata veriyor.

Mysql veri tabanı "utf8_turkish_ci" bir çok dillerde test yaptım değişmedi yine seçili verileri metin text dosyasından çekiyor.

İçerik ekleme çekme php dosyasında sorun olduğunu düşünüyorum bazı eklemeler yapmama rağmen sonuç aynı değişmiyor.

 

<?php
$host = "localhost";
$dbname = "xxxxx";
$username = "xxxxx";
$password = "xxxxx";
try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Veritabanı hatasi" . $e->getMessage());
}
$dosyaAdi = "veriler.txt";
try {
    $dosya = fopen($dosyaAdi, "r");
    while (!feof($dosya)) {
        $satir = fgets($dosya);
 
        if (!empty($satir)) {
            $stmt = $pdo->prepare("INSERT INTO makale (adi) VALUES (:deger)");
            $stmt->bindParam(':deger', $satir);
            $stmt->execute();
        }
    }
    fclose($dosya);
    echo "eklendi";
} catch (Exception $e) {
    echo "eklenmiyor" . $e->getMessage();
}
?>

Veritabanına veri eklerken, karakter seti uyumluluğunu sağlamak için bazı eklemeler yapmanız gerekebilir. Özellikle Türkçe karakterlerin doğru bir şekilde veritabanına eklenmesi için SET NAMES sorgusunu kullanabilirsiniz. Ayrıca, PDO bağlantısı oluştururken karakter setini de belirtmeniz faydalı olabilir.

Aşağıdaki gibi güncellenmiş bir kod örneği verilebilir:

<?php
$host = "localhost";
$dbname = "xxxxx";
$username = "xxxxx";
$password = "xxxxx";
try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // Karakter setini UTF-8 olarak belirtiyoruz.
    $pdo->exec("SET NAMES 'utf8mb4'");
} catch (PDOException $e) {
    die("Veritabanı hatasi" . $e->getMessage());
}

$dosyaAdi = "veriler.txt";
try {
    $dosya = fopen($dosyaAdi, "r");
    while (!feof($dosya)) {
        $satir = fgets($dosya);
 
        if (!empty($satir)) {
            $stmt = $pdo->prepare("INSERT INTO makale (adi) VALUES (:deger)");
            // Türkçe karakterlerin doğru işlenmesi için 'UTF-8' olarak belirtiyoruz.
            $stmt->bindValue(':deger', $satir, PDO::PARAM_STR);
            $stmt->execute();
        }
    }
    fclose($dosya);
    echo "eklendi";
} catch (Exception $e) {
    echo "eklenmiyor" . $e->getMessage();
}
?>

Bu örnek, charset=utf8mb4 ile karakter setini belirtir ve SET NAMES 'utf8mb4' ile karakter setini bağlantı üzerinden ayarlar. Ayrıca PDO::PARAM_STR ile Türkçe karakterleri içeren metni bind ederken karakter tipini belirtiyoruz.

Kodunuzda bu değişiklikleri yaparak Türkçe karakterleri içeren metinleri doğru şekilde veritabanınıza ekleyebilirsiniz

 

 

 

wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al