• 19-10-2024, 16:04:56
    #1
    çeşitli araştırmalar yaptım ama sql den gelen verideki türkçe karakterler ğ,ç,ş gibi
    JSON_UNESCAPED_UNICODE de kullansam olmuyor php kodum şu şekilde

              try {
                            global $DBSettings;
                            $pdo = new PDO("odbc:DRIVER={$DBSettings['driver']};SERVER={$DBSettings['server']};DATABASE={$DBSettings['game_db']};charset=UTF-8", $DBSettings['uid'], $DBSettings['pass']);
                    
                            $haber_secenek = isset($_POST['haber_secenek']) ? (int)$_POST['haber_secenek'] : 1;
                    
                            $stmt = $pdo->prepare("SELECT  haber_basligi, haber_icerigi, haber_tarihi
                                                    FROM _panelhaber
                                                    WHERE haber_secenek = :haber_secenek
                                                    ORDER BY haber_tarihi DESC");
                            $stmt->bindParam(':haber_secenek', $haber_secenek, PDO::PARAM_INT);
                            $stmt->execute();
                    
                            $haberler = $stmt->fetchAll(PDO::FETCH_OBJ);
                    
                            if ($haberler) {
                                echo json_encode($haberler,JSON_UNESCAPED_UNICODE);
                            } else {
                                echo json_encode(['error' => "Haber bulunamadı."]);
                            }
                        } catch (PDOException $e) {
                            echo json_encode(['error' => "Bağlantı hatası: " . $e->getMessage()]);
                        }
  • 19-10-2024, 16:32:26
    #2
    Veri tabanına bağlantınız da utf8 tanımlaması var mı hocam? Bir sorun gözükmüyor karakterleri tekrar diziye çevirdiğiniz de olması gerektiği gibi çıktı alırsınız.
  • 19-10-2024, 16:44:06
    #3
    CREATIVE35 adlı üyeden alıntı: mesajı görüntüle
    çeşitli araştırmalar yaptım ama sql den gelen verideki türkçe karakterler ğ,ç,ş gibi
    JSON_UNESCAPED_UNICODE de kullansam olmuyor php kodum şu şekilde

              try {
                            global $DBSettings;
                            $pdo = new PDO("odbc:DRIVER={$DBSettings['driver']};SERVER={$DBSettings['server']};DATABASE={$DBSettings['game_db']};charset=UTF-8", $DBSettings['uid'], $DBSettings['pass']);
                    
                            $haber_secenek = isset($_POST['haber_secenek']) ? (int)$_POST['haber_secenek'] : 1;
                    
                            $stmt = $pdo->prepare("SELECT  haber_basligi, haber_icerigi, haber_tarihi
                                                    FROM _panelhaber
                                                    WHERE haber_secenek = :haber_secenek
                                                    ORDER BY haber_tarihi DESC");
                            $stmt->bindParam(':haber_secenek', $haber_secenek, PDO::PARAM_INT);
                            $stmt->execute();
                    
                            $haberler = $stmt->fetchAll(PDO::FETCH_OBJ);
                    
                            if ($haberler) {
                                echo json_encode($haberler,JSON_UNESCAPED_UNICODE);
                            } else {
                                echo json_encode(['error' => "Haber bulunamadı."]);
                            }
                        } catch (PDOException $e) {
                            echo json_encode(['error' => "Bağlantı hatası: " . $e->getMessage()]);
                        }
    PHP Dosyasını bomsuz utf-8 olarak kaydettiğinize emin olun,
    <?php
    try {
        global $DBSettings;
        $options = [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
        ];
        $pdo = new PDO("odbc:DRIVER={$DBSettings['driver']};SERVER={$DBSettings['server']};DATABASE={$DBSettings['game_db']};charset=utf8mb4", $DBSettings['uid'], $DBSettings['pass'], $options);
    
        $haber_secenek = isset($_POST['haber_secenek']) ? (int)$_POST['haber_secenek'] : 1;
    
        $stmt = $pdo->prepare("SELECT haber_basligi, haber_icerigi, haber_tarihi
                               FROM _panelhaber
                               WHERE haber_secenek = :haber_secenek
                               ORDER BY haber_tarihi DESC");
        $stmt->bindParam(':haber_secenek', $haber_secenek, PDO::PARAM_INT);
        $stmt->execute();
    
        $haberler = $stmt->fetchAll(PDO::FETCH_OBJ);
    
        if ($haberler) {
            $haberler = array_map(function($haber) {
                return array_map('utf8_encode', (array)$haber);
            }, $haberler);
            
            header('Content-Type: application/json; charset=utf-8');
            echo json_encode($haberler, JSON_UNESCAPED_UNICODE);
        } else {
            echo json_encode(['error' => "Haber bulunamadı."]);
        }
    } catch (PDOException $e) {
        echo json_encode(['error' => "Bağlantı hatası: " . $e->getMessage()]);
    }
    Bunun haricinde yinede olmazsa htaccess dosyanızda farklı dillere yönlendirme olup olmadığına bakın.
  • 19-10-2024, 16:48:17
    #4
    CodeDev adlı üyeden alıntı: mesajı görüntüle
    Veri tabanına bağlantınız da utf8 tanımlaması var mı hocam? Bir sorun gözükmüyor karakterleri tekrar diziye çevirdiğiniz de olması gerektiği gibi çıktı alırsınız.
    Tablonun collation kısmı sütun nvarchar olarak ayarladım. windows collation u açıp türkçe utf 8 olarak da denedim ama yine olmadı
  • 19-10-2024, 18:11:00
    #5
    PropJoe adlı üyeden alıntı: mesajı görüntüle
    PHP Dosyasını bomsuz utf-8 olarak kaydettiğinize emin olun,
    <?php
    try {
        global $DBSettings;
        $options = [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
        ];
        $pdo = new PDO("odbc:DRIVER={$DBSettings['driver']};SERVER={$DBSettings['server']};DATABASE={$DBSettings['game_db']};charset=utf8mb4", $DBSettings['uid'], $DBSettings['pass'], $options);
    
        $haber_secenek = isset($_POST['haber_secenek']) ? (int)$_POST['haber_secenek'] : 1;
    
        $stmt = $pdo->prepare("SELECT haber_basligi, haber_icerigi, haber_tarihi
                               FROM _panelhaber
                               WHERE haber_secenek = :haber_secenek
                               ORDER BY haber_tarihi DESC");
        $stmt->bindParam(':haber_secenek', $haber_secenek, PDO::PARAM_INT);
        $stmt->execute();
    
        $haberler = $stmt->fetchAll(PDO::FETCH_OBJ);
    
        if ($haberler) {
            $haberler = array_map(function($haber) {
                return array_map('utf8_encode', (array)$haber);
            }, $haberler);
            
            header('Content-Type: application/json; charset=utf-8');
            echo json_encode($haberler, JSON_UNESCAPED_UNICODE);
        } else {
            echo json_encode(['error' => "Haber bulunamadı."]);
        }
    } catch (PDOException $e) {
        echo json_encode(['error' => "Bağlantı hatası: " . $e->getMessage()]);
    }
    Bunun haricinde yinede olmazsa htaccess dosyanızda farklı dillere yönlendirme olup olmadığına bakın.
    htaccess de bir sorun yok ama bu verdiğiniz kod kısmet çalıştı ç,ü çalışıyor fakat ş,ğ gibi harfler hala yok ve hata ayıklamayı açtığımda network de <br />
    <b>Deprecated</b>: Function utf8_encode() is deprecated in <b>C:xampphtdocsRouterDefault.php</b> on line <b>652</b><br />
    <br />
    <b>Deprecated</b>: Function utf8_encode() is deprecated in <b>C:xampphtdocsRouterDefault.php</b> on line <b>652</b><br />
    <br />
    <b>Deprecated</b>: Function utf8_encode() is deprecated in <b>C:xampphtdocsRouterDefault.php</b> on line <b>652</b><br />
    <br />
    <b>Deprecated</b>: Function utf8_encode() is deprecated in <b>C:xampphtdocsRouterDefault.php</b> on line <b>652</b><br />
    <br />
    <b>Deprecated</b>: Function utf8_encode() is deprecated in <b>C:xampphtdocsRouterDefault.php</b> on line <b>652</b><br />
    <br />
    <b>Deprecated</b>: Function utf8_encode() is deprecated in <b>C:xampphtdocsRouterDefault.php</b> on line <b>652</b><br />
    [{"haber_basligi":"Ýstanbul’da Hava Durumu","haber_icerigi":"Ýstanbul’da bugün þiddetli yaðmur bekleniyor.","haber_tarihi":"2024-10-19 17:35:00.847"},{"haber_basligi":"Çanakkale Zaferi","haber_icerigi":"Çanakkale Zaferi, Türk milletinin direniþ sembolüdür.","haber_tarihi":"2023-10-18 00:00:00.000"}] hatası var
  • 19-10-2024, 18:35:50
    #6
    CREATIVE35 adlı üyeden alıntı: mesajı görüntüle
    htaccess de bir sorun yok ama bu verdiğiniz kod kısmet çalıştı ç,ü çalışıyor fakat ş,ğ gibi harfler hala yok ve hata ayıklamayı açtığımda network de <br />
    <b>Deprecated</b>: Function utf8_encode() is deprecated in <b>C:xampphtdocsRouterDefault.php</b> on line <b>652</b><br />
    <br />
    <b>Deprecated</b>: Function utf8_encode() is deprecated in <b>C:xampphtdocsRouterDefault.php</b> on line <b>652</b><br />
    <br />
    <b>Deprecated</b>: Function utf8_encode() is deprecated in <b>C:xampphtdocsRouterDefault.php</b> on line <b>652</b><br />
    <br />
    <b>Deprecated</b>: Function utf8_encode() is deprecated in <b>C:xampphtdocsRouterDefault.php</b> on line <b>652</b><br />
    <br />
    <b>Deprecated</b>: Function utf8_encode() is deprecated in <b>C:xampphtdocsRouterDefault.php</b> on line <b>652</b><br />
    <br />
    <b>Deprecated</b>: Function utf8_encode() is deprecated in <b>C:xampphtdocsRouterDefault.php</b> on line <b>652</b><br />
    [{"haber_basligi":"Ýstanbul’da Hava Durumu","haber_icerigi":"Ýstanbul’da bugün þiddetli yaðmur bekleniyor.","haber_tarihi":"2024-10-19 17:35:00.847"},{"haber_basligi":"Çanakkale Zaferi","haber_icerigi":"Çanakkale Zaferi, Türk milletinin direniþ sembolüdür.","haber_tarihi":"2023-10-18 00:00:00.000"}] hatası var
    <?php
    try {
        global $DBSettings;
        $options = [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
        ];
        $dsn = "odbc:DRIVER={$DBSettings['driver']};SERVER={$DBSettings['server']};DATABASE={$DBSettings['game_db']};charset=utf8mb4";
        $pdo = new PDO($dsn, $DBSettings['uid'], $DBSettings['pass'], $options);
    
        $haber_secenek = isset($_POST['haber_secenek']) ? (int)$_POST['haber_secenek'] : 1;
    
        $stmt = $pdo->prepare("SELECT haber_basligi, haber_icerigi, haber_tarihi
                               FROM _panelhaber
                               WHERE haber_secenek = :haber_secenek
                               ORDER BY haber_tarihi DESC");
        $stmt->bindParam(':haber_secenek', $haber_secenek, PDO::PARAM_INT);
        $stmt->execute();
    
        $haberler = $stmt->fetchAll();
    
        if ($haberler) {
            header('Content-Type: application/json; charset=utf-8');
            echo json_encode($haberler, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
        } else {
            echo json_encode(['error' => "Haber bulunamadı."], JSON_UNESCAPED_UNICODE);
        }
    } catch (PDOException $e) {
        echo json_encode(['error' => "Bağlantı hatası: " . $e->getMessage()], JSON_UNESCAPED_UNICODE);
    }
    Sanırım sürümsel olarak sıkıntı var, güncelleştirdiğim kodu tekrar denermisiniz?
    Veritabanınızın utf8mb4 karakter setini kullandığından emin olun, değilse kodu ona göre düzenleyin.
  • 20-10-2024, 19:09:56
    #7
    Şu şekilde deneyebilirsiniz:

    <?php
    header('Content-Type: application/json; charset=utf-8');
    
    try {
        global $DBSettings;
        $pdo = new PDO("odbc:DRIVER={$DBSettings['driver']};SERVER={$DBSettings['server']};DATABASE={$DBSettings['game_db']};charset=utf8mb4", $DBSettings['uid'], $DBSettings['pass']);
        
        $pdo->exec("SET NAMES 'utf8mb4'");
        
        $haber_secenek = isset($_POST['haber_secenek']) ? (int)$_POST['haber_secenek'] : 1;
    
        $stmt = $pdo->prepare("SELECT haber_basligi, haber_icerigi, haber_tarihi
                               FROM _panelhaber
                               WHERE haber_secenek = :haber_secenek
                               ORDER BY haber_tarihi DESC");
        $stmt->bindParam(':haber_secenek', $haber_secenek, PDO::PARAM_INT);
        $stmt->execute();
    
        $haberler = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
        if ($haberler) {
            // UTF-8
            $haberler = array_map(function($haber) {
                return array_map(function($value) {
                    return mb_convert_encoding($value, 'UTF-8', 'auto');
                }, $haber);
            }, $haberler);
    
            echo json_encode($haberler, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
        } else {
            echo json_encode(['error' => "Haber bulunamadı."]);
        }
    } catch (PDOException $e) {
        echo json_encode(['error' => "Bağlantı hatası: " . $e->getMessage()]);
    }
    ?>
    Kolay gelsin.