Bir php komut dosyası kullanarak mysql veritabanına Umlaut takma

2 Cevap php

i bir girdi olarak bir csv alan bir senaryo geliştiriyorum, daha sonra dosyayı okur ve bir mysql veritabanına içeriğini yerleştirin. Veritabanına veri eklerken Yani sorun gelir. Bu rastgele karakterler içine Umlaut dönüştürür.

Bilginize - Benim veritabanı latin_german_ci bulunmaktadır. [I de UTF8 bunu değiştirmeyi denedim]

i web tarayıcılarında Umlaut karakterleri görüntülemek için mümkün ama ben bir sql sorgusu ile bir veritabanında onları eklemeye çalıştığınızda, rasgele karakterler ekler.

<?php

function uploadCsv($filename){

    echo "filename - ".$filename."<br/>";

    if(isset($filename) || $filename == ""){ // return with an error msg.

    }else{
        $pos = stripos($filename, ".csv");
        if($pos == 0 || $pos != strlen($filename)-4){
            //echo "invalid format";
            return ;
        }
    }

    set_time_limit(0);
    $error = "";
    $row = 0;
    $handle = fopen($filename, "r");
    //echo "<br/>".$filename."<br/>";
    //echo "<br/>".$handle."<br/>";
    if($handle == null){

        return "unable to process";
    }

    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {

        if ($row == 0) {
            // this is the first line of the csv file
            // it usually contains titles of columns
            // do nothing.
            $num = count($data);
            //echo "num - ".$num."<br/>";
            if($num != 2){
                // echo "returning back";
                return "invalid CSV format.";
            }
        }
        // this handles the rest of the lines of the csv file
        $num = count($data);
        $id = $data[0];
        $inserQuery = "";
        $inserQuery =  "INSERT INTO `table` (
                            `ID` ,
                            `Productname`
                            )
                            VALUES (";

        for ($c=0; $c < $num; $c++) {
            if($c==0){
                $inserQuery .= " '". utf8_encode($data[$c])."'" ;
            }else{
                $inserQuery .= ", '". utf8_encode($data[$c]) ."'" ;
            }
        }
        $inserQuery .= ");";
        echo $inserQuery."<br/>";
        mysql_query($inserQuery);
        if(mysql_affected_rows() == -1 || mysql_affected_rows() <1){
            echo "error<br/>";
        }else{
            echo "row inserted - ".$row." with ID = ".$id." <br/>";
        }
        $row++;
    }
    fclose($handle);
    return "1";
}
?>

Lütfen yardım ....

teşekkürler

2 Cevap

Aynı prosedür ... bakın

http://stackoverflow.com/questions/1650591/whether-to-use-set-names/1650834#1650834

ve

http://stackoverflow.com/questions/1566602/is-set-character-set-utf8-necessary/1566908#1566908

Esasen şey onu istemci (PHP script) beklediğiniz hangi karakter kümesi MySQL söylemek zorunda olmasıdır.

Neden bir latin veritabanı için () utf8_encode kullanabilirim? Nedir web sayfanızda (HTTP Content-Type ve HTML meta etiketleri) kodlama? Nedir kaynak kodu kodlama (sizin editörü bu yapılandırabilirsiniz)? Hangi programı veritabanı ve hangi kodlama kullanmak yok görüntülemek için kullanabilirim?