PHP中的RTF文件上传和UTF的问题

时间:2010-01-15 20:13:07

标签: php scripting character-encoding

我想创建一个Web表单,允许用户使用PHP上传具有外语内容的UTF-8文本/ rtf文件,然后通过exec()函数在其上执行一系列命令。完成此处理后,我会将其作为下载文件发回给用户。

我在html中使用文件输入表单和提交按钮制作了基本表单。 PHP方面有以下内容。

$base_dir = './uploads';
$cmd = "mkdir -p ".$base_dir.' ; mv -v '.$_FILES['file']['tmp_name'].'$_/'.$_FILES['file']['name'].' ; /var/www/cgi-bin/test.awk'.'/var/www/html/uploads/'.$_FILES['file']['name'].'>'.'/var/www/html/uploads/'.$_FILES['file']['name'];
exec($cmd);
print '<a href="http://oceanfizz.usc.edu/uploads/'.$_FILES['file']['name'].'">download file </a>';

但问题是上传的rtf文件似乎主要有像

一样的文本更改
  

所以“é变成了'8e abd等等。

我认为这是编码的问题

有人可以建议一种快速简便的方法将文件上传到服务器并通过浏览器获取处理过的文件,同时保留编码和内容。

2 个答案:

答案 0 :(得分:1)

使用unix内部移动命令移动文件并不是真的很聪明。请使用php上传功能。

对于您的编码问题,您可以先使用serialize()序列化上传文件的内容;如果用户请求它反序列化它。这是在互联网上传输文件的最佳方式。

答案 1 :(得分:0)

我们需要查看您在表单中使用的代码,以便确定地发布数据。正如streetparade所说 - 你应该使用move_uploaded_file()来移动文件 - 而不是mv。

然而,一旦它到达服务器,特别是作为Unix服务器,系统就没有必要也没有办法改变它。

当你说它已经改变了,你为什么这么想?我认为您更有可能通过非utf8编辑器访问该文件,或者您使用错误的编码类型下载了该文件。

尝试类似:

 <?php 
 move_uploaded_file($_FILES['userfile']['tmp_name'], 'uploads/temp/test.txt');
 header('Content-type: text/plain; charset=utf-8');

 print file_get_contents('uploads/test.txt');

 ?>