2015-03-13 4 views
0

Я создал веб-сайт, на котором показаны файлы и каталоги определенной папки (названные документы). Пользователь может перемещаться по каталогам, и если он выберет файл (pdf doc и т. Д.), Он загрузит его. Проблема заключается в том, что он работает во всех браузерах, но именно в сафари, если пользователь выбирает файл (PDF DOC и т.д.) не будет загружать его и новое окно сказав, например:Ссылка работает во всех браузерах, кроме сафари (php code)

Запрошенный URL/root/documents/2013-01-13 1Î · ÎÎºÏ «Î ± κϻ Î · - 1Î · Î • Î £/ÎÎÎ ÎºÏ »Î¹ÎºÎ¬ 1Î · Ï, Î • κϫ Î ± ÎºÏ »Î · Ï, I «.I £. TÎœ.Î Î> Î-ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ сервер.

Странные буквы предполагают быть греческими. Я пытаюсь понять, почему и тот факт, что он развивается только в сафари, кажется мне очень странным. Вот код, который отвечает за содержание ссылок. Я поставил большую стрелку в качестве комментария над кодом, который отвечает за ссылки файлов (внутри «если»). Любая идея была бы действительно полезна.

<?php 

    function convert_to($source){ 
     $encoding = mb_detect_encoding($source, "auto"); 
     if ($encoding !== 'UTF-8'){ 
      return mb_convert_encoding($source, 'UTF-8','UTF-8'); 
     } 
     else { 
      return $source; 
     } 

    } 

?> 
    <div id="container"> 

      <img class="logo" src="images/logo.jpg" title="uop search engine" width="800" height="80" /> 

      <table class="tbl"> 
<tr> 
<td> 
<p class="pl" >Πλοήγηση στα πρακτικά των συνελεύσεων</p> 
</td> 
<td style="text-align:right;"> 
<form action='' method="post"> 
<input type='search' id="search" name='s' autocomplete="off"> 
<input type='submit' id="button" value='Search' class="button1" > 
</form> 
</td> 
</tr> 
</table> 

      <div class="tfclear"></div> 
    </div> 
    <div id="container"> 
     <?php 
      include "showresults.php"; 
     ?> 
    </div> 


    <table class="sortable"> 
     <thead> 
      <tr> 
       <th>Filename</th> 
       <th>Type</th> 
       <th>Size <small>(KB)</small></th> 
       <th>Date Modified</th> 
      </tr> 
     </thead> 
     <tbody> 
    <?php 


      if (!isset($_GET['currentdirectory'])){ 
       $rootDirectory=opendir("./documents"); 
       //$currentDirectory=ROOT; 
      } 
      else { 

       $currentDirectory = $_GET['currentdirectory']; 
       $rootDirectory=opendir($currentDirectory); 

      } 
      //echo $currentDirectory; 


      //echo $rootDirectory; 
      starter($rootDirectory); 




      Function starter($myDirectory){ 



       while($entryName=readdir($myDirectory)) { 

        $dirArray[]=$entryName; 

       } 


       function findexts ($filename) { 
        $filename=strtolower($filename); 
        $exts=split("[/\\.]", $filename); 
        $n=count($exts)-1; 
        $exts=$exts[$n]; 
        return $exts; 
       } 

       closedir($myDirectory); 

       $indexCount=count($dirArray); 

       sort($dirArray); 


       $c=0; 
       for($index=0; $index < $indexCount; $index++) { 
        //echo $dirArray[$index]; 
        if($_SERVER['QUERY_STRING']=="hidden"){ 
         $hide=""; 
         $ahref="./"; 
         $atext="Hide"; 
        } 
        else { 
         $hide="."; 
         $ahref="./?hidden"; 
         $atext="Show"; 
        } 
        if(substr("$dirArray[$index]", 0, 1) != $hide) { 

         $name=$dirArray[$index]; 
         $namehref=$dirArray[$index]; 

         $extn=findexts($dirArray[$index]); 

         if (!isset($_GET['currentdirectory'])){ 
          $MYCDIR = "./documents"; 
         } 
         else { 
          $MYCDIR = $_GET['currentdirectory']; 
          //echo $_GET['currentdirectory']; 
          $MYCDIR = iconv("UTF-8", "UTF-8",$MYCDIR); 

          if($c==0){ 
          $parent="Γονικός κατάλογος"; 

                 print(" 
          <tr class='$class'> 
           <td><a href='".dirname($_SERVER[PHP_SELF])."'>".$parent."</a></td> 

          </tr>"); 
          $c=1; 
          } 

         } 
         // echo mb_detect_encoding($MYCDIR, "auto"); 
         $size=number_format(filesize($MYCDIR."/".$dirArray[$index])/1024,2). ' KB'; 


         $modtime=date("M j Y g:i A", filemtime($MYCDIR."/".$dirArray[$index])); 
         $timekey=date("YmdHis", filemtime($MYCDIR."/".$dirArray[$index])); 

         switch ($extn){ 
          case "png": $extn="PNG Image"; break; 
          case "jpg": $extn="JPEG Image"; break; 
          case "svg": $extn="SVG Image"; break; 
          case "gif": $extn="GIF Image"; break; 
          case "ico": $extn="Windows Icon"; break; 
          case "txt": $extn="Text File"; break; 
          case "log": $extn="Log File"; break; 
          case "htm": $extn="HTML File"; break; 
          case "php": $extn="PHP Script"; break; 
          case "js": $extn="Javascript"; break; 
          case "css": $extn="Stylesheet"; break; 
          case "pdf": $extn="PDF Document"; break; 
          case "zip": $extn="ZIP Archive"; break; 
          case "bak": $extn="Backup File"; break; 
          default: $extn=strtoupper($extn)." File"; break; 
         } 

         if(is_dir($MYCDIR."/".$dirArray[$index])) { 
          $extn="&lt;Directory&gt;"; 
          $size=folderSize($MYCDIR."/".$dirArray[$index]); 
          $size=number_format($size/1024,2). ' KB'; 
          $class="dir"; 
         } 
         else { 
          $class="file"; 
         } 


         if($name=="."){ 
          $name=". (Current Directory)"; 
          $extn="&lt;System Dir&gt;"; 
         } 
         if($name==".."){ 
          $name=".. (Parent Directory)"; 
          $extn="&lt;System Dir&gt;"; 
         } 
          //echo $namehref; 
          //<~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Here is the problem 
         if ($extn!="&lt;Directory&gt;"){ 

          $hrefparameter = convert_to($MYCDIR."/".$namehref); 
          $hrefparameter = str_replace("./","/",$hrefparameter); 
          //echo mb_detect_encoding($hrefparameter, "auto"); 
          print(" 
          <tr class='$class'> 
           <td><a target='blank' href='".SUBFOLDER.$hrefparameter."'>".convert_to($name)."</a></td> 
           <td>$extn</td> 
           <td>$size</td> 
           <td sorttable_customkey='$timekey'>$modtime</td> 
          </tr>"); 
         } 
         else { 

          $hrefparameter0 = $MYCDIR."/$namehref"; 
          $hrefparameter = convert_to($MYCDIR."/$namehref"); 

          print(" 
          <tr class='$class'> 
           <td><a href='".SUBFOLDER."?currentdirectory=".urlencode($hrefparameter)."&cdir=".urlencode($hrefparameter0)."'>".convert_to($name)."</a></td> 
           <td>$extn</td> 
           <td>$size</td> 
           <td sorttable_customkey='$timekey'>$modtime</td> 
          </tr>"); 
         } 
         //echo mb_detect_encoding($hrefparameter, "auto"); 
        } 
       } 
      } 

       FUNCTION folderSize($dir){ 
        $count_size = 0; 
        $count = 0; 
        $dir_array = scandir($dir); 
        foreach($dir_array as $key=>$filename){ 
         if($filename!=".." && $filename!="."){ 
          if(is_dir($dir."/".$filename)){ 
           $new_foldersize = foldersize($dir."/".$filename); 
           $count_size = $count_size+ $new_foldersize; 
         } 
         else if(is_file($dir."/".$filename)){ 
          $count_size = $count_size + filesize($dir."/".$filename); 
          $count++; 
         } 
        } 
       } 
       return $count_size; 
      } 


?> 


    <div id="showing"></div> 
    <div id="results" class="results"> 



    </div> 
    </tbody> 
    </table> 
    <form> 
     <input 
      type='button' 
      id="button" 
      value='DownloadAll' 
      class="button2" 
      <?php if (!isset($_GET['currentdirectory'])){ $_GET['currentdirectory']=""; } ?> 
      onClick="window.location='downloadZip.php?currentdirectory=<?php echo $_GET['currentdirectory']; ?>';" > 
    </form> 
+0

РНР serverside- браузер отметив, чтобы сделать с ним –

+0

браузер может иметь отношение к той степени, что она, по какой-либо причине, запрашивая другой URL-адрес с сервера, чем другие запросы браузеров. Итак: что говорит журнал доступа на сервере? Можете ли вы сравнить с тем, что говорит журнал доступа для запроса из другого браузера? – Andrew

+0

Andrew на данный момент у меня нет доступа к журналу доступа, но я проверю его как можно скорее. –

ответ

0
if ($encoding !== 'UTF-8'){ 
     return mb_convert_encoding($source, 'UTF-8','UTF-8'); 
    } 

Вы преобразование из UTF-8 кодировки в UTF-8 кодировке. В результате сафари, похоже, получает URL-адрес в неподдерживаемой кодировке, которая, похоже, не обрабатывается должным образом.

Try:

if ($encoding !== 'UTF-8'){ 
     return mb_convert_encoding($source, 'UTF-8','UTF-8,ISO-8859-7 '); 
    } 

UPDATE

Я сделал некоторые дополнительные испытания, и кажется, что mb_detect_encoding() всегда возвращает UTF-8, если "авто" определяется как атрибут или нет второго атрибута не является прошло. Я решил это, выполнив это, как показано ниже, но не может полностью протестировать его без фактических файлов и путей. Попробуйте, если он работает так:

function convert_to($source){ 
    $encoding = mb_detect_encoding($source, "Windows-1253,ISO-8859-7,UTF-8"); 
    if ($encoding !== 'UTF-8'){ 
     return mb_convert_encoding($source, 'utf-8','Windows-1253,ISO-8859-7,UTF-8'); 
    } 
    else { 
     return $source; 
    } 

} 
+0

Я пробовал то, что вы сказали, но результат заключается в том, что все каталоги показаны с неизвестной кодировкой (japanese), и если я захочу открыть каталог, чтобы увидеть, какие файлы внутри него пустые (все каталоги). Большое спасибо за попытку :) –

+0

Также я забыл упомянуть, что проект запущен на сервере linux, а кодировка - по умолчанию utf-8. –

+0

Sory для позднего комментирования. Вы уверены, что все файлы php сохраняются в кодировке UTF-8 без спецификации? Сервер запускает linux, но файлы могут не соответствовать правильной кодировке, если они редактируются в окнах через ftp или ssh. Кроме того, попробуйте добавить 'accept-charset = 'UTF-8'' в качестве дополнительного атрибута в тег формы. – lrd