Pertanyaan Metode terbaik untuk mengubah input pengguna ke UTF-8


Saya sedang membangun aplikasi web PHP, dan bekerja di UTF-8. Basis data adalah UTF-8, halaman disajikan sebagai UTF-8 dan saya mengatur charset menggunakan meta tag ke UTF-8. Tentu saja, dengan pengguna yang menggunakan Internet Explorer, dan menyalin & menempel dari Microsoft Office, saya entah bagaimana berhasil mendapatkan input UTF-8 sesekali.

Solusi ideal adalah melempar HTTP 400 Bad Request kesalahan, tetapi jelas saya tidak bisa melakukan itu. Hal terbaik berikutnya adalah konversi $_GET, $_POST dan $_REQUEST ke UTF-8. Apakah ada pula untuk melihat apa karakter pengkodean input di jadi saya bisa lulus itu ke iconv? Jika tidak, apa solusi terbaik untuk melakukan ini?


9
2017-07-26 14:21


asal


Jawaban:


Periksa mb_detect_encoding()  Contoh:

$utf8 = iconv(mb_detect_encoding($input), 'UTF-8', $input);

Ada juga utf8_encode()  jika Anda menjamin bahwa string tersebut dimasukkan sebagai ISO-8859-1.


8
2017-07-26 14:28



Dalam beberapa kasus hanya menggunakan utf8_encode atau pemeriksaan umum yang ok tetapi Anda mungkin kehilangan beberapa karakter dalam string. Jika Anda dapat membuat daftar string / string dasar berdasarkan berbagai jenis, contoh ini adalah jendela, Anda dapat menyelamatkan sedikit lebih banyak.

if(!mb_detect_encoding($fileContents, "UTF-8", true)){
    $checkArr = array("windows-1252", "windows-1251");
    $encodeString = '';
    foreach($checkArr as $encode){
        if(mb_check_encoding($fileContents, $encode)){
            $encodeString .= $encode.",";
        }
    }
    $encodeString = substr($encodeString, 0, -1);
    $fileContents = mb_convert_encoding($fileContents, "UTF-8", $encodeString);
}

0
2017-12-09 22:00