2013-12-11 2 views
5

Я пытаюсь загрузить файл с арабским именем (مرحبا بكم), но когда я загружаю его на сервер, строка неверна, он показывает такие символы (Ø ± ÙŠ'-Ù) ,загружать файл с арабским именем

Итак, как я могу загрузить файлы и сохранить правильное арабское имя?

<form action="up.php" method="post" enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file"><br> 
<input type="submit" name="submit" value="Submit"> 
</form> 

PHP File:

<?php 
if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Error: " . $_FILES["file"]["error"] . "<br>"; 
    } 
else 
    { 
    echo "Upload: " . $_FILES["file"]["name"] . "<br>"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br>"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " kB<br>"; 
    echo "Stored in: " . $_FILES["file"]["tmp_name"]; 
    } 
?> 
+0

только некоторые советы, но выяснить восьмеричные/ascii /, что когда-либо диаграмма кодирования и проверить его на значения на вашем компьютере, это может быть, что его загрузили правильно, и вы просматриваете его неправильно. dd и xxd - ваши друзья, мне жаль, что я не мог предложить больше, чем предложение, а не на самом деле помочь! GL – Prospero

+0

Возможно, это помогает: http: // stackoverflow.com/questions/15055192/why-do-windows-need-to-utf8-decode-filenames-for-file-get-contents-to-work – Hardy

+2

Убедитесь, что ваш выход - utf-8: 'header ('Content-Type : text/html; charset = utf-8 '); ' –

ответ

0

Почему не могу просто кодировать и декодировать имя файла с помощью base64.

getfile name-> 
$encoded_fname = base64_encode("arabic_filename") 

upload file->move_uploaded_file with encoded filename; 

move_uploaded_file($_FILES["file"]["tmp_name"],"path/to/move/" . $encoded_fname); 

декодировать, если хотите, при загрузке.

Надеюсь, это даст вам представление.

0

Теперь вы можете попробовать, как мой нижеследующий код.

HTML FILE

<html> 
<head></head> 
<body> 
<form action="up.php" method="post" enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="FILE" name="file" id="file"> 
<input type="submit" name="submit" value="Submit"> 
</form> 
</body> 
</html> 

PHP FILE (up.php)

сделать загрузку папок, на корневом каталоге.

<?php 
if(isset($_POST['submit'])) { 
    $file = $_FILES['file']['name']; 
    $encoded_fname = base64_encode($file); 
    if($file) { 
     $move = move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $encoded_fname); 
     if($move) { 
     echo "file uploaded"; 
     } 
    } 
} 
?> 

Результат чтения файлов (watch.php)

$dir = "upload/"; 
if (is_dir($dir)) { 
    if ($dh = opendir($dir)) { 
     while (($file = readdir($dh)) !== false) { 
      if(mb_check_encoding($file)) { 
      echo "filename: .".base64_decode($file)."<br />"; 
      } 
      else { 
       echo $file . "<br>"; 
      } 
     } 
     closedir($dh); 
    } 
} 

Так вы загружаете файл в base64 кодирования, а затем получить результат, расшифровывает его.

Надеюсь, это поможет вам.

Спасибо.

1

Я бы включил unicode (utf8) как на веб-странице, так и в файловой системе.

0

я имел такую ​​же проблему на месте я работаю, и я должен был провести очень долго на этом так просто для использования знания :) у не нужно закодировать или изменение кодировки символов или любую вещь это после того, как представить переименовать файл меткой времени он работает для меня идеально, как этого

$file = $_FILES['file']['name'][$f]; //the file in arabic 
/////////////////////////////////////////////////////////// 
$arr = explode(".", $file, 2); 
echo $first = $arr[0]; // the name without the extension and the dot 
/////////////////////////////////////////////////////////// 
//$data = $name; 
$whatIWant = substr($data, strpos($data, ".") + 1);  
$file_upload =time().".".$whatIWant; //name of the upload file 

`
надеется, это поможет любой потерянной душе :) и это полная страница

enter link description here

Смежные вопросы