我正在创建一些下载链接。我的问题是,如果“my_file_name.doc”文件是用英文字符保存的,那么就是下载。如果我用希腊字符保存它,那么我不能下载...我使用的是utf-8编码。
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CFS Portal</title>
</head>
<body>
<div>
<span class="txt">
<a href="scripts/download.php?file=MY_FILE_NAME.doc" class="dload">Ιατρικό</a>
</span></div>
</body>
和我的download.php文件:
<?php
// block any attempt to the filesystem
if (isset($_GET['file']) && basename($_GET['file']) == $_GET['file']) {
$filename = $_GET['file'];
} else {
$filename = NULL;
}
$err = '<p class="err_msg">
STOP / ΣΤΑΜΑΤΗΣΤΕ
</p>';
if (!$filename) {
// if variable $filename is NULL or false display the message
echo $err;
} else {
// define the path to your download folder plus assign the file name
$path = 'downloads/'.$filename;
// check that file exists and is readable
if (file_exists($path) && is_readable($path)) {
// get the file size and send the http headers
$size = filesize($path);
header('Content-Type: application/octet-stream;');
header('Content-Length: '.$size);
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Transfer-Encoding: binary');
// open the file in binary read-only mode
// display the error messages if the file can´t be opened
$file = @ fopen($path, 'rb');
if ($file) {
// stream the file and exit the script when complete
fpassthru($file);
exit;
} else {
echo $err;
}
} else {
echo $err;
}
}
?>
您的脚本中可能存在以下几个问题:
1。文件系统编码问题
要实际访问文件系统上的文件,必须正确编码文件名。LC_CTYPE区域设置参数告诉磁盘上文件名的预期编码。
根据我的经验,不同的浏览器支持不同的方法来编码非ASCII文件名,并且在出现特殊字符或无效字符时表现不同(例如,在Windows下,文件名中不允许问号“?”,浏览器要么简单地删除该字符,要么用随机生成的另一个字符完全替换整个文件名)。无论如何,以下代码块可以在大多数浏览器中使用:
$file_name = "Caffé Brillì.pdf"; # file name, UTF-8 encoded $file_mime = "application/pdf"; # MIME type $file_path = "absolute/or/relative/path/file"; header("Content-Type: $file_mime"); header("Content-Length: " . filesize($file_path)); $agent = $_SERVER["HTTP_USER_AGENT"]; if( is_int(strpos($agent, "MSIE")) ){ # Remove reserved chars: :\/*?"| $fn = preg_replace('/[:\\x5c\\/*?"|]/', '_', $file_name); # Non-standard URL encoding: header("Content-Disposition: attachment; filename=" . rawurlencode($fn)); } else if( is_int(strpos($agent, "Gecko")) ){ # RFC 2231: header("Content-Disposition: attachment; filename*=UTF-8''" . rawurlencode($file_name)); } else if( is_int(strpos($agent, "Opera")) ) { # Remove reserved chars: :\/*{? $fn = preg_replace('/[:\\x5c\\/{?]/', '_', $file_name); # RFC 2231: header("Content-Disposition: attachment; filename*=UTF-8''" . rawurlencode($fn)); } else { # RFC 2616 ASCII-only encoding: $fn = mb_convert_encoding($file_name, "US-ASCII", "UTF-8"); $fn = (string) str_replace("\\", "\\\\", $fn); $fn = (string) str_replace("\"", "\\\"", $fn); header("Content-Disposition: attachment; filename=\"$fn\""); } readfile($file_path);
希望这能有所帮助。
我在R中读取包含希腊字母的csv文件时遇到问题。我试过: 这个网站(如何检测read.csv的正确编码?)建议我尝试不同的文件编码,但似乎都不管用。R显示希腊字母,如下所示: 然而,在Excel中,它就像: 有谁知道我做错了什么,或者我如何才能正确地阅读希腊字母?非常感谢。文件可以在此处下载:https://drive.google.com/file/d/1K44FTvUFUWm5l-xwz58S
导入以下文件时遇到问题:http://www.kuleuven.be/bio/ento/temp/test.xlsx以正确的编码输入R。特别地, 给了我 但是
我正在尝试使用iText 7为Java创建一个带有希腊字符的pdf。PDF中只有拉丁字符和数字可见。 我正在使用以下代码加载字体: 我该怎么办?
我有一个带有一些特殊字符的mysql数据库,一个输入表单,一些PHP页面。 > 这个页面发送(通过GET)一个参数到另一个php页面(ResultsPage)。 最后这个php页面(ResultsPage)向dbms发送一个带有参数的查询并显示结果。 RequestPage编码为utf-8至 meta http equiv=“Content Type”Content=“text/html;char
我有一个网站,每月通过FTP接收一次CSV文件。多年来,这是一个ASCII文件。现在我一个月收到UTF-8,下一个月收到UTF-16BE,下个月收到UTF-16LE。也许下个月我会得到UTF-32。fget返回UTF文件开头的字节顺序标记。如何让PHP自动识别字符编码?我尝试过mb_detect_encoding它返回ASCII不管文件类型。我更改了代码以读取BOM,并显式地将字符编码mb_con
我正在创建一个包含希腊字符的XHTML。在下面找到一个简单的例子。 当我打印结果时,我得到了。 有什么能帮忙的吗?