Я создал простой код для загрузки изображений в папку с PHP.
На стороне сервера у меня есть
<?php header('Content-Type: text/plain; charset=utf-8'); //check if file is actually an image etc. //if is an image, send it to "upload" folder move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]); //save to the database a string like "upload/myImage.jpg", so I can render it on the site later $stu = $dbh->prepare("UPDATE multi SET m_place=:name WHERE m_id = :id"); $stu->bindParam(':name', $n, PDO::PARAM_STR); $n= "upload/".$_FILES["file"]["name"]; $stu->execute();
Проблема?
Если имя изображения на английском языке в папке, я вижу «myImage01.jpg», а в базе данных также «upload / myImage01.jpg». Но, если имя изображения находится в греческом языке в папке, я вижу «Ο ‡ Ο ‰ ΟΞ-Ο, Ο« Ξ-Ο »Ξ» ΞΏ.jpg »и в db« upload / Ο ‡ Ο ‰ ΟΞ- Ο, Ο "Ξ-Ο" Ξ »ΞΏ.jpg". Это неправильно. Insted of Ο ‡ Ο ‰ ΟΞ-Ο, Ο «Ξ-Ο» Ξ »ΞΏ Я должен получить« χωρις τιτλο »(это грек для« без названия »кстати). Итак, я думаю, проблема с кодировкой?
Как это исправить?
заранее спасибо
Похоже, что в вашей базе данных нет правильной сортировки. Убедитесь, что таблицы / столбцы используют utf8_general_ci
для их сопоставления.
Также чрезвычайно важно при обработке UTF8 использовать следующие две строки MySQL для запросов GET
…
SET time_zone = '+00:00' SET CHARACTER SET 'utf8'
… и когда у вас есть запрос POST
используйте следующие два …
SET time_zone = '+00:00' SET NAMES 'utf8'
Это поможет убедиться, что символы UTF8 сохранены правильно.
Наконец, я понял, что «функции файловой системы PHP могут обрабатывать только символы, которые находятся в системной кодовой странице». Благодаря этому я решаю свою проблему.
Я использовал функцию iconv
Поэтому я изменил строку move_uploaded_file
так
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . iconv('UTF-8', 'Windows1253',$_FILES["file"]["name"]));