Heim  >  Artikel  >  Backend-Entwicklung  >  Was tun, wenn der von PHP IE heruntergeladene Dateiname verstümmelt ist?

Was tun, wenn der von PHP IE heruntergeladene Dateiname verstümmelt ist?

藏色散人
藏色散人Original
2020-10-23 09:10:162043Durchsuche

Lösungen für verstümmelte Dateinamen, die von PHP IE heruntergeladen wurden: 1. Verstümmelte Zeichen mithilfe der Header-Methode auflösen 2. Verwenden Sie Methoden wie „function remote_filesize($uri,$user='',$pw='') {.. .}" Lösen Sie den verstümmelten Code.

Was tun, wenn der von PHP IE heruntergeladene Dateiname verstümmelt ist?

Empfohlen: „PHP-Video-Tutorial

Problem mit verstümmeltem IE-Dateinamen beim Herunterladen der PHP-Datei

Ich habe den Chrome-Browser verwendet und keine Probleme festgestellt. Ich habe heute IE6 verwendet und festgestellt, dass der Dateiname beim Herunterladen der Datei verstümmelt war und der von Thunder unter IE heruntergeladene Dateiname ebenfalls verstümmelt war. Ich habe online nachgesehen und gesagt, dass ich Urlencode verwenden muss, um es im IE zu kodieren. Ich habe es mit

header('Content-Disposition: attachment; filename='. rawurlencode($file_name);) versucht. Das Ergebnis war immer noch verstümmelt, als ich es heruntergeladen habe it. Die PHP-Datei selbst ist gbk/gb2312-Kodierung, also habe ich zuerst $file_name in utf-8-Kodierung konvertiert und dann urlencode

header('Content-Disposition: attachment; filename='. rawurlencode(iconv("GBK"," UTF-8",$ Dateiname))); Auf diese Weise gibt es beim Herunterladen mit dem IE kein Problem. Könnte es sein, dass URL-Code nur der Codierung von UTF-8 entgehen kann?

Es gibt auch das Problem, die Größe der Fernbedienung zu ermitteln Die Dateigrößenfunktion in PHP kann nur die Verarbeitung lokaler Dateien durchführen. Die Verarbeitung entfernter Dateien wird fehlschlagen und die auf der Windows-Plattform übergebenen Parameter müssen UTF-8 verwenden Die Codierung kann nicht auf Ressourcen im System zugreifen.

Ich habe vier Möglichkeiten gefunden, Remote-Dateien im Internet abzurufen. Vielen Dank, Senioren, dass Sie sie geteilt haben:

Methode 1: Header

<?php get_headers($url,true); //返回结果 Array ( [0] => HTTP/1.1 200 OK [Date] => Sat, 29 May 2004 12:28:14 GMT [Server] => Apache/1.3.27 (Unix) (Red-Hat/Linux) [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT [ETag] => "3f80f-1b6-3e1cb03b" [Accept-Ranges] => bytes [Content-Length] => 438 [Connection] => close [Content-Type] => text/html ) ?>

Hier Sie können die Größe direkt basierend auf der Inhaltslänge ermitteln

Methode 2: Curl

function remote_filesize($uri,$user=&#39;&#39;,$pw=&#39;&#39;) { // start output buffering ob_start(); // initialize curl with given uri $ch = curl_init($uri); // make sure we get the header curl_setopt($ch, CURLOPT_HEADER, 1); // make it a http HEAD request curl_setopt($ch, CURLOPT_NOBODY, 1); // if auth is needed, do it here if (!emptyempty($user) && !emptyempty($pw)) { $headers = array(&#39;Authorization: Basic &#39; . base64_encode($user.&#39;:&#39;.$pw)); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); } $okay = curl_exec($ch); curl_close($ch); // get the output buffer $head = ob_get_contents(); // clean the output buffer and return to previous // buffer settings ob_end_clean(); echo &#39;<br>head-->&#39;.$head.&#39;<----end <br>&#39;; // gets you the numeric value from the Content-Length // field in the http header $regex = &#39;/Content-Length:\s([0-9].+?)\s/&#39;; $count = preg_match($regex, $head, $matches); // if there was a Content-Length field, its value // will now be in $matches[1] if (isset($matches[1])) { $size = $matches[1]; } else { $size = &#39;unknown&#39;; } //$last=round($size/(1024*1024),3); //return $last.&#39; MB&#39;; return $size; } 方法三:fsock
function getFileSize($url) { $url = parse_url($url); if($fp = @fsockopen($url[&#39;host&#39;],emptyempty($url[&#39;port&#39;])?80:$url[&#39;port&#39;],$error)) { fputs($fp,"GET ".(emptyempty($url[&#39;path&#39;])?&#39;/&#39;:$url[&#39;path&#39;])." HTTP/1.1\r\n"); fputs($fp,"Host:$url[host]\r\n\r\n"); while(!feof($fp)) { $tmp = fgets($fp); if(trim($tmp) == &#39;&#39;) { break; } elseif(preg_match(&#39;/Content-Length:(.*)/si&#39;,$tmp,$arr)) { return trim($arr[1]); } } return null; } else { return null; } } 方法四:file_get_contents
$fCont = file_get_contents("http://www.cnmiss.cn/"); echo strlen($fCont)/1024;
.

Das obige ist der detaillierte Inhalt vonWas tun, wenn der von PHP IE heruntergeladene Dateiname verstümmelt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn