上传具有阿拉伯名称的文件

时间:2013-12-11 02:24:46

标签: php upload arabic

我正在尝试上传具有阿拉伯名称的文件(مرحبابكم),但是当我将其上传到服务器时,字符串不正确,它会显示这样的字符(ريÙ-Ù)。

那么,我如何上传文件并保留正确的阿拉伯名字?

<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文件:

 <?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"];
  }
?>

4 个答案:

答案 0 :(得分:1)

我会在网页和文件系统中启用unicode(utf8)。

答案 1 :(得分: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);

在下载时解码。

希望这会给你一个想法。

答案 2 :(得分:0)

现在你可以试试我的下面的代码。

HTML文件

<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文件(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中上传文件,然后通过解码得到结果。

希望它会对你有所帮助。

感谢。

答案 3 :(得分: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