在php中下载名称中包含unicode字符的文件

时间:2016-01-02 13:16:39

标签: php laravel-5

我使用laravel5和windows7进行网络开发。我的视图中有一些链接,点击这些用户后可以下载他们想要的文件。

<div class="col-xs-12 col-sm-12 col-md-12 flip pull-right">
    <a href="download/docs/ezharNameKarshenasi.docx" style="display: block;margin-top: 20px;margin-bottom: 20px;"><img src="images/docx.gif" />فرم اظهارنامه کارشناسی</a>
    <a href="download/docs/drakhasteSodoreParvaneTasis.docx" style="display: block;margin-top: 20px;margin-bottom: 20px;"><img src="images/docx.gif" />فرم درخواست صدور پروانه تاسیس</a>
    <a href="download/docs/taghazayeSodooreParvane.docx" style="display: block;margin-top: 20px;margin-bottom: 20px;"><img src="images/docx.gif" />فرم تقاضای صدور پروانه موافقت اصولی آبزیان</a>
    <a href="download/docs/sherkateSahamiIran.docx" style="display: block;margin-top: 20px;margin-bottom: 20px;"><img src="images/docx.gif" />فرم پروانه موافقت اصولی ماهیان سرد آبی در سیستم مدار بسته</a>
    <a href="download/docs/morafiName.docx" style="display: block;margin-top: 20px;margin-bottom: 20px;"><img src="images/docx.gif" />فرم معرفی نامه جهت در یافت اعتبارات بانکی</a>
    <a href="download/docs/نامه.docx" style="display: block;margin-top: 20px;margin-bottom: 20px;"><img src="images/docx.gif" />نامه</a>
</div>

但是某些文件名的名称中包含unicode字符。例如:C:\ wamp \ www \ shilat-sistanL5 \ public \ docs \نامه.docx。

在我的路线文件中,我添加了以下代码:

Route::get('download/{type}/{filename}', function($type,$filename)
{

    $file = public_path() .'\\'.$type. '\\' . $filename; // or wherever you have stored your PDF files
    return response()->download($file);
});

当试图下载نامه。docx文件时,我遇到了这个错误: File.php第37行中的FileNotFoundException:文件“C:\ wamp \ www \ shilat-sistanL5 \ public \ docs \نامه.docx”不存在。

我知道这个问题与php有关,不支持utf-8文件。任何人都有解决这个问题的方法吗?

1 个答案:

答案 0 :(得分:0)

我没有使用PHP的经验,但我遇到了与JSP几乎完全相同的问题。 我解决它的方法是通过编码URL。

对于Java,我使用了owasp的库

public static String paramEncode(String param) {
    return org.owasp.encoder.Encode.forUriComponent(param);
}

但对于PHP,我认为你可以使用像

这样的东西
string urlencode ( string $str )

请参阅http://uk.php.net/manual/en/function.urlencode.php