Я создал веб-сайт, который показывает файлы и каталоги определенной папки (именованные документы). Пользователь может перемещаться по каталогам и, если он выбирает файл (pdf doc и т. Д.), Он загружает его. Проблема в том, что он работает во всех браузерах, но особенно в safari, если пользователь выбирает файл (pdf и т. Д.), Он не загружает его, и появляется новое окно, например, с текстом:
Запрашиваемый URL / root / documents / 2013-01-13 1Î · ÎˆÎºÏ „Î ± κτ Î · — 1Î · Î • Î £ / Î ÏÎ ± ÎºÏ „ικά 1Î · Ï‚ Î • ÎºÏ „Î ± κτ Î · Ï ‚Ϋ .Î £. TÎœ.Î Î ›Î — ΡΟΦΟΡΠ™ ΚΠ— Î £ ΚΒΠ™ ΤΠ— Λ Î • Î Î ™ ΚΟΠ™ ÎÎ © ÎÎ ™ Î © Î.doc не найден на этом сервер.
Странные буквы предполагают, что они греческие. Я пытаюсь понять, почему, и тот факт, что это происходит только в сафари, кажется мне действительно странным. Вот код, который отвечает за содержание ссылок. Я поставил большую стрелку в качестве комментария над кодом, который отвечает за ссылки файлов (он находится внутри «если»). Любая идея будет очень полезна.
<?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>
<?phpif (!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="<Directory>";
$size=folderSize($MYCDIR."/".$dirArray[$index]);
$size=number_format($size/1024,2). ' KB';
$class="dir";
}
else {
$class="file";
}if($name=="."){
$name=". (Current Directory)";
$extn="<System Dir>";
}
if($name==".."){
$name=".. (Parent Directory)";
$extn="<System Dir>";
}
//echo $namehref;
//<~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Here is the problem
if ($extn!="<Directory>"){
$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>
if ($encoding !== 'UTF-8'){
return mb_convert_encoding( $source, 'UTF-8','UTF-8');
}
Вы переводите кодировку UTF-8 в кодировку UTF-8. В результате safari, кажется, получает URL в неподдерживаемой кодировке, которая, кажется, не обрабатывает должным образом.
Пытаться:
if ($encoding !== 'UTF-8'){
return mb_convert_encoding( $source, 'UTF-8','UTF-8,ISO-8859-7 ');
}
Я сделал дополнительное тестирование, и кажется, что mb_detect_encoding()
всегда возвращает UTF-8, если в качестве атрибута указано «auto» или второй атрибут не передан. Я решил это, выполнив это, как показано ниже, но не могу полностью протестировать это без фактических файлов и путей. Попробуйте, если это работает так:
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;
}
}
Других решений пока нет …