2013-09-22 5 views
1

Я создал простой код для загрузки изображений в папку с PHP.set charset при сохранении файлов с 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 Ο ‡ Ο ‰ ΟΞ-Ο, Ο «Ξ-Ο» Ξ »ΞΏ Я должен получить« χωρις τιτλο »(это грек для« без названия »кстати). Итак, я думаю, проблема с кодировкой?

Как исправить это?

Заранее спасибо

+0

Выезд [Загрузить UTF-8 имя_файла] (http://stackoverflow.com/questions/18204364/php -загрузить-UTF-8-файла). –

+0

@MartyMcVry Спасибо. Эта ссылка actaully помогла мне – slevin

ответ

2

Это звучит как базы данных не имеют правильные параметры сортировки. Убедитесь, что таблицы/столбцы используют 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.

+0

Я изменяю сортировку столбца таблицы, используя pgAdmin. Я установил его в 'pg_catalog. 'C". Это для postgreSQL. Теперь имена сохраняются. Но в папке я все еще вижу 'Ο ‡ Ο ‰ ΟΞ-Ο, Ο" Ξ-Ο "Ξ» ΞΏ'. В php-файле у меня есть 'header ('Content-Type: text/plain; charset = utf-8');' и '$ dbh-> exec (" SET NAMES UTF8 "); $ dbh-> query ('SET NAMES UTF8'); '. Конечно, веб-страница не отображает изображение, потому что оно ищет изображение, которого не существует. Должен ли я редактировать файл php? Или, может быть, сервер Apache? Или это вина окна. Я не знаю, я потерял – slevin

+0

Убедитесь, что вы не сохраняете документы с помощью спецификации (отметка о байтов). Подробнее на моем сайте здесь: http://www.jabcreations.com/web/xhtml/editors – John

+0

Я использую DreamWeaver. Интересная статья. Благодарю. В DreamWeaver кодировка - 'utf8', форма нормализации Unicode -' C', а Include Unicode Signature (BOM) не отмечена. Итак, я прикрыт (?). Я просто не могу понять, есть ли его сервер, база данных или файл, который обрабатывает загрузку. – slevin

0

Наконец, я выясню, что «функции файловой системы PHP могут обрабатывать только символы, которые находятся в системной кодовой странице». Благодаря this я решаю свою проблему.

Я использовал iconv функция

Так что я изменил move_uploaded_file строку так

move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . iconv('UTF-8', 'Windows1253',$_FILES["file"]["name"])); 
Смежные вопросы