Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 下载前转换编码_Php_Encoding_Utf 8 - Fatal编程技术网

Php 下载前转换编码

Php 下载前转换编码,php,encoding,utf-8,Php,Encoding,Utf 8,我正在搜索一种在下载之前转换torrent编码(从UTF-8-BOM到WINDOWS-1252)的方法,因为如果我只是使用readfile()下载它,torrent是无效的bencoding,所以我需要将其转换为WINDOWS-1252或CP1252 单击我的页面上的下载,然后下载WINDOWS-1252编码的torrent文件 这是我的剧本: header(“内容处置:附件;文件名=\”$tname.torrent\”) 标题(“内容类型:应用程序/八位字节流”) 标题(“内容长度:.file

我正在搜索一种在下载之前转换torrent编码(从UTF-8-BOM到WINDOWS-1252)的方法,因为如果我只是使用readfile()下载它,torrent是无效的bencoding,所以我需要将其转换为WINDOWS-1252或CP1252

单击我的页面上的下载,然后下载WINDOWS-1252编码的torrent文件

这是我的剧本:

header(“内容处置:附件;文件名=\”$tname.torrent\”)
标题(“内容类型:应用程序/八位字节流”)
标题(“内容长度:.filesize($fn))
$content=iconv(“UTF-8”、“WINDOWS-1252”、readfile($fn))
打印($content)

实际上,这个脚本不起作用,因为当我下载文件时,它是空的。
怎么办?

readfile
直接打印请求的文件,但您使用它就像它会返回文件内容一样。
为此,您必须使用
file\u get\u contents

您也可能会得到错误的文件大小,因为UTF-8编码的文件很可能与Windows-1252编码的文件大小不同。

因此,不要使用
filesize($fn)
,而是使用
strlen($content)

为什么要这样做?为什么要回到过去的世界?我们很高兴现在大多数系统或多或少都提供unicode。享受吧!除此之外:您确定文件的内容实际上可以用这种旧的8位编码进行编码吗?我的意思是unicode有一个原因:它允许使用8位编码中无法描述的字符。这可能实际上就是调用
iconv()
失败的原因…我需要编码,因为:当我上传torrent(upload.php表单)时,torrent被正确上传并且工作正常-如果我通过ftp下载-但是当我通过download.php下载时,torrent不是有效的bencoding。我正在尝试制作一个torrent平台,我需要它。。。如果你能向我解释怎么做……对不起,如果我不理解这个问题,我就无法帮助你找到解决办法。如果torrent运行良好,那么为什么要对其重新编码?为了什么?在下载之后,找出为什么文件不能被使用(“无效”)不是更有意义吗?怎么了?文件的两个版本在上传和下载版本之间有什么不同?看。torrent是用ANSI(记事本+)编码的。我有GTAVtorrent,如果我用notepad++打开它,我会看到它是用ANSI编码的。当我从自己的网站下载torrent时,当我用Notepad++打开它时,我看到它是用UTF-8-BOM编码的,如果我将它的编码改为ANSI,它就会重新工作。这就是为什么我需要在下载时对文件重新编码。下载torrent时,它被编码为UTF-8-BOM。我需要在下载时,将文件编码为ANSI,而不是UTF-8-BOM。当我这样做时,文件是空的。我的意思是,它不转换任何内容。@Lego_Infinity,文件本身是PHP进程可读的,是非空的,并且是UTF-8编码的?
文件大小($fn)
返回什么?是。PHP可以读取该文件。这个文件不是用UTF-8编码的,它是用ANSI编码的,但是当我下载它时,我收到了UTF-8版本。@Lego_Infinity你是说ASCII吗?另外,UTF-8和Windows-1252都包含ASCII字符集,因此将ASCII文件从UTF-8转换为Windows-1252应该什么都不做。那么,我该怎么做呢?如果我使用PHP脚本中的readfile查看torrent,它与我在Notepad++中查看文件的方式不完全相同。