Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah yang perlu saya lakukan jika saya mendapat ralat semasa memuat naik gambar dengan aksara Cina dalam PHP?

Apakah yang perlu saya lakukan jika saya mendapat ralat semasa memuat naik gambar dengan aksara Cina dalam PHP?

PHPz
PHPzasal
2023-04-11 09:16:11640semak imbas

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.

Manifestasi masalah

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 masalah

Sebab 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"
Penyelesaian

Terdapat banyak cara untuk menyelesaikan masalah ini Kami menyediakan dua penyelesaian biasa di sini.

Pilihan 1: Penukaran pengekodan manual

Kami 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

Kami boleh mengubah suai fail konfigurasi PHP untuk membenarkan PHP melakukan penukaran pengekodan secara automatik, sekali gus mengelakkan proses penukaran pengekodan manual. Operasi khusus adalah seperti berikut:

Cari fail konfigurasi php.ini Lokasi mungkin berbeza-beza bergantung pada sistem yang berbeza.

  1. Buka fail php.ini dan cari dua baris berikut:
  2. ; Default charset for auto content type. 
    ; http://php.net/default-charset 
    default_charset = "UTF-8"
    Tambah kandungan berikut selepas baris
  3. :
  4. ; Default charset for auto content type.

    Simpan fail php.ini dan mulakan semula pelayan web.
    ; 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
  5. Melalui operasi di atas, kami telah berjaya mengubah suai fail konfigurasi PHP, membenarkan PHP melakukan penukaran pengekodan secara automatik dan menyelesaikan masalah ralat semasa memuat naik imej dengan aksara Cina. Kaedah ini lebih mudah, tetapi perlu diingatkan bahawa sebelum menggunakan kaedah ini, anda perlu memastikan sambungan
  6. telah dipasang pada pelayan.

RingkasanSuhosin

Apabila menggunakan PHP untuk memuat naik fail, jika nama fail yang dimuat naik mengandungi aksara Cina, muat naik mungkin gagal. Untuk menyelesaikan masalah ini, anda boleh melakukan penukaran pengekodan secara manual, atau anda boleh mengubah suai fail konfigurasi PHP dan membiarkan PHP melakukan penukaran pengekodan secara automatik Kedua-dua kaedah mempunyai kelebihan dan kekurangan mereka sendiri, dan anda boleh memilih kaedah yang sesuai untuk menyelesaikannya mengikut keadaan sebenar.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn