Rumah >pembangunan bahagian belakang >masalah PHP >Apakah yang perlu saya lakukan jika saya mendapat ralat semasa memuat naik gambar dengan aksara Cina dalam PHP?
Apabila menggunakan PHP untuk memuat naik fail, jika nama fail mengandungi aksara Cina, muat naik mungkin gagal. Ini kerana dalam protokol HTTP, aksara Cina dalam nama fail perlu dikodkan untuk dihantar dengan betul, dan PHP tidak melakukan pengekodan ini secara lalai, sekali gus menyebabkan muat naik gagal.
Sekarang, mari kita bincangkan cara menyelesaikan masalah ini.
Apabila kami menggunakan PHP untuk memuat naik fail, jika nama fail yang dimuat naik mengandungi aksara Cina, muat naik mungkin melaporkan ralat Mesej ralat biasanya adalah beberapa aksara yang tidak dapat difahami. Punca ralat tidak dapat ditentukan dengan tepat.
Sebagai contoh, kami cuba memuat naik fail bernama "Test Image.jpg" semasa proses muat naik, jika nama fail mengandungi aksara Cina, seperti "Test Image (Chinese).jpg", muat naik. mungkin gagal.
Warning: move_uploaded_file(): Unable to move '/tmp/php12efan' to '/var/www/html/upload/测试图片(中文).jpg'Punca masalahSebab masalah ini ialah dalam protokol HTTP, aksara Cina perlu dikodkan untuk dihantar dengan betul. Apabila menggunakan PHP untuk memuat naik fail, PHP akan menukar nama fail yang dimuat naik kepada format pengekodan ISO-8859-1 secara lalai, dan aksara Cina tidak disertakan dalam pengekodan ISO-8859-1, jadi aksara bercelaru akan muncul. Jika kita melihat permintaan HTTP yang dimuat naik, kita dapat melihat bahawa nama fail yang dimuat naik adalah seperti ini:
Seperti yang anda lihat, nama fail yang dimuat naik tidak dikodkan dalam mana-mana cara.
Content-Disposition: form-data; name="file"; filename="测试图片(中文).jpg"PenyelesaianTerdapat banyak cara untuk menyelesaikan masalah ini Kami menyediakan dua penyelesaian biasa di sini. Pilihan 1: Penukaran pengekodan manualKami boleh menukar pengekodan nama fail yang dimuat naik secara manual untuk mendapatkan nama fail yang betul. Operasi khusus adalah seperti berikut:
Dalam kod di atas, kami menggunakan fungsi
untuk menukar nama fail daripada pengekodan UTF-8 kepada pengekodan ISO-8859-1 dan mendapat yang betul nama fail, dan kemudian Muat naik fail itu. Kelemahan kaedah ini ialah ia agak rumit dan memerlukan penukaran pengekodan manual, yang tidak cukup mudah.$file = $_FILES['file']; $filename = iconv('UTF-8', 'ISO-8859-1', $file['name']); move_uploaded_file($file['tmp_name'], '/var/www/html/upload/' . $filename);
Pilihan 2: Ubah suai fail konfigurasi PHP iconv
Cari fail konfigurasi php.ini Lokasi mungkin berbeza-beza bergantung pada sistem yang berbeza.
; Default charset for auto content type. ; http://php.net/default-charset default_charset = "UTF-8"Tambah kandungan berikut selepas baris
; Default charset for auto content type.
; Add charset=utf-8 to Content-Type header for files with non-ASCII names ; that have been encoded using RFC 2231 suhosin.upload.unicode.semantics=1
RingkasanSuhosin
Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika saya mendapat ralat semasa memuat naik gambar dengan aksara Cina dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!