Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2016, 16:06   #1
artur4ek94
Пользователь
 
Регистрация: 11.11.2015
Сообщений: 11
По умолчанию Не могу разобраться с кодировкой

Доброго времени суток!
Как решить такую проблему с кодировкой?
Кодировка самого файла - UTF-8.
Функция на php читает файлы и папки из указаной директории, и выводит их на экран. отображаются они нормально, а вот в поисковой строке при открытии папки с русскими символами непонятная чушь(фото 2).
Кодировка в HTML стоит <meta charset="utf-8">. Кодировка локального сервера и файла php.ini на сервере тоже UTF-8.
Как с этим бороться?
PHP код:
function getFileSize$size ) {
  
$times 0;
  
$comma '.';
  while (
$size>1024) {
    
$times++;
    
$size $size/1024;
  }
  
$size2 floor($size);
  
$rest $size $size2;
  
$rest $rest 100;
  
$decimal floor($rest);
 
  
$addsize $decimal;
  if (
$decimal<10$addsize .= '0';
 
  if (
$times == 0
    
$addsize $size2;
  else
    
$addsize $size2.$comma.mb_substr($addsize,0,2);
 
  switch (
$times) {
    case 
$mega ' bytes'; break;
    case 
$mega ' KB'; break;
    case 
$mega ' MB'; break;
    case 
$mega ' GB'; break;
  }
 
  
$addsize .= $mega;
 
  return 
$addsize;
}
 
// Рекурсивная функция для удаления каталога
function removeDir$dir )
{
  if ( 
$d opendir($dir) ) {
    while( (
$file readdir($d)) !== false ) {
      if ( 
is_file($dir.'/'.$file) ) {
        
unlink($dir.'/'.$file);
      } else if ( 
is_dir($dir.'/'.$file) and $file != '.' and $file != '..' ) {
        
removeDir($dir.'/'.$file);
      }
    }
    
closedir($d);
  }
  return 
rmdir($dir);
}
 
$dir $_POST["dirName"];
if ( isset( 
$_GET['dir'] ) ) $dir $_GET['dir'];
 
// ПЕРВАЯ ЧАСТЬ СКРИПТА - ПОКАЗАТЬ СПИСОК ДИРЕКТОРИЙ И ФАЙЛОВ
if ( is_dir($dir) ) { 
  
chdir($dir);
 
  
$basedir getcwd();
  
$basedir str_replace('\\','/'$basedir);    
 
  
// Родительская директория
  
$parent dirname($basedir);
  
$cur $basedir;
  
// Путь до текущей директории
  
$path '';
  while (
mb_substr($cur01) == '/') {
    
$cur mb_substr($cur1mb_strlen($cur));
    
$path .= '/'
  }
  
$p_out $path;
  while (
mb_strlen($cur) > 0) {
    
$k mb_strpos($cur,'/');
    if (!
mb_strpos($cur,'/')) $k mb_strlen($cur);
    
$s mb_substr($cur,0,$k);
    
$cur mb_substr($cur$k+1mb_strlen($cur));
    
$path .= $s.'/';
    
$p_out .= '<a href="'.$_SERVER['PHP_SELF'].'?dir='.$path.'">'.$s.'</a>/';
  }
  echo 
"<div class='wraper'>";
  echo 
'<p class="currentDir">Текущая директория: '.$p_out.'</p>';
  echo 
'<div>&nbsp;<a href="'.$_SERVER['PHP_SELF'].'?dir='.$parent.'"><img src="./images/prev.png" alt="" /><strong>Назад</strong></a></div>'."\n";
  echo 
"</div>";
  
  
// Список файлов и директорий текущей директории
  
$files = array();
  
$folders = array();
  
$zipFiles = array();
  if ( 
$dh opendirgetcwd() ) ) {
    while ((
$file readdir($dh)) !== false) {
      if (
$file != '..' && $file != '.') {
        if ( 
is_file$file ) ) {
          
$files[] = $file;
        }
        if ( 
is_dir$file ) ) $folders[] = $file;
      }
    }
    
closedir($dh);
  }
  
  echo 
"<table border='3'><tr><th>#</th><th>Имя</th><th>Тип</th><th>Размер</th></tr>";
 
  foreach (
$folders as $file) {
      echo 
'<tr><td><img src="./images/folder.gif" alt="" /></td><td><a title="Перейти в папку" href="'.$_SERVER['PHP_SELF'].'?dir='.$basedir.'/'.$file.'">'.iconv("Windows-1251","UTF-8",$file).'</a></td><td>Папка</td><td></td></tr>';
  }
 
  foreach (
$files as $file) {
    echo 
'<tr><td><img src="./images/file.gif" alt="" /></td><td>'.iconv("Windows-1251","UTF-8",$file).'</td><td>Файл</td><td>'.getFileSize(filesize($file)).'</td></tr>';
  }
     echo 
"</table>";

Изображения
Тип файла: png Снимок5.PNG (2.9 Кб, 26 просмотров)
Тип файла: png Снимок4.PNG (69.5 Кб, 117 просмотров)
artur4ek94 вне форума Ответить с цитированием
Старый 06.12.2016, 16:28   #2
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Вот это почитайте, прояснит некоторые моменты !
http://дмитрий-дьяконов.рф/копирован...google-chrome/
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 06.12.2016, 17:12   #3
artur4ek94
Пользователь
 
Регистрация: 11.11.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от pompiduskus Посмотреть сообщение
Вот это почитайте, прояснит некоторые моменты !
http://дмитрий-дьяконов.рф/копирован...google-chrome/
Иероглифы из адресной строки исчезли, но в папку с названием из русских символов все равно не заходит.
artur4ek94 вне форума Ответить с цитированием
Старый 06.12.2016, 18:25   #4
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Вот, это должно помочь !

http://php.net/manual/en/function.rawurlencode.php
http://php.net/manual/en/function.rawurldecode.php

А вообще, зачем делать это на кириллце ?
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 06.12.2016, 21:19   #5
artur4ek94
Пользователь
 
Регистрация: 11.11.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от pompiduskus Посмотреть сообщение
Вот, это должно помочь !

http://php.net/manual/en/function.rawurlencode.php
http://php.net/manual/en/function.rawurldecode.php

А вообще, зачем делать это на кириллце ?
Так а что делать? Мне просто нужно чтобы оно открывало папку с кириллическим название.Вот и все
artur4ek94 вне форума Ответить с цитированием
Старый 06.12.2016, 21:38   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Что сейчас в URL?
Andkorol вне форума Ответить с цитированием
Старый 07.12.2016, 00:09   #7
artur4ek94
Пользователь
 
Регистрация: 11.11.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Что сейчас в URL?
Сейчас в кирилические папки заходит , но не во все. Может я что-то не досмотрел?
Код:
function getFileSize( $size ) {
  $times = 0;
  $comma = '.';
  while ($size>1024) {
    $times++;
    $size = $size/1024;
  }
  $size2 = floor($size);
  $rest = $size - $size2;
  $rest = $rest * 100;
  $decimal = floor($rest);

  $addsize = $decimal;
  if ($decimal<10) $addsize .= '0';

  if ($times == 0) 
    $addsize = $size2;
  else
    $addsize = $size2.$comma.mb_substr($addsize,0,2);

  switch ($times) {
    case 0 : $mega = ' bytes'; break;
    case 1 : $mega = ' KB'; break;
    case 2 : $mega = ' MB'; break;
    case 3 : $mega = ' GB'; break;
  }

  $addsize .= $mega;

  return $addsize;
}

// Рекурсивная функция для удаления каталога
function removeDir( $dir )
{
  if ( $d = opendir($dir) ) {
    while( ($file = readdir($d)) !== false ) {
      if ( is_file($dir.'/'.$file) ) {
        unlink($dir.'/'.$file);
      } else if ( is_dir($dir.'/'.$file) and $file != '.' and $file != '..' ) {
        removeDir($dir.'/'.$file);
      }
    }
    closedir($d);
  }
  return rmdir($dir);
}

$dir = $_POST["dirName"];
if ( isset( $_GET['dir'] ) ) $dir = $_GET['dir'];

// ПЕРВАЯ ЧАСТЬ СКРИПТА - ПОКАЗАТЬ СПИСОК ДИРЕКТОРИЙ И ФАЙЛОВ
if ( is_dir($dir) ) { 
  chdir($dir);

  $basedir = getcwd();
  $basedir = str_replace('\\','/', $basedir);    

  // Родительская директория
  $parent = iconv("Windows-1251","UTF-8",rawurlencode(dirname($basedir)));
  $cur = $basedir;
  // Путь до текущей директории
  $path = '';
  while (mb_substr($cur, 0, 1) == '/') {
    $cur = mb_substr($cur, 1, mb_strlen($cur));
    $path .= '/'; 
  }
  $p_out = $path;
  while (mb_strlen($cur) > 0) {
    $k = mb_strpos($cur,'/');
    if (!mb_strpos($cur,'/')) $k = mb_strlen($cur);
    $s = mb_substr($cur,0,$k);
    $cur = mb_substr($cur, $k+1, mb_strlen($cur));
    $path .= $s.'/';
    $p_out .= '<a href="'.$_SERVER['PHP_SELF'].'?dir='.$path.'">'.$s.'</a>/';
  }
  echo "<div class='wraper'>";
  echo '<p class="currentDir">Текущая директория: '.iconv("Windows-1251","UTF-8",$p_out).'</p>';
  echo '<div>&nbsp;<a href="'.$_SERVER['PHP_SELF'].'?dir='.iconv("Windows-1251","UTF-8",rawurldecode($parent)).'"><img src="./images/prev.png" alt="" /><strong>Назад</strong></a></div>'."\n";
  echo "</div>";
  
  // Список файлов и директорий текущей директории
  $files = array();
  $folders = array();
  $zipFiles = array();
  if ( $dh = opendir( getcwd() ) ) {
    while (($file = readdir($dh)) !== false) {
      if ($file != '..' && $file != '.') {
	    if ( is_file( $file ) ) {
		  $files[] = $file;
		}
		if ( is_dir( $file ) ) $folders[] = rawurlencode($file);
      }
    }
    closedir($dh);
  }
  
  echo "<table border='3'><tr><th>#</th><th>Имя</th><th>Тип</th><th>Размер</th></tr>";

  foreach ($folders as $file) {
      echo '<tr><td><img src="./images/folder.gif" alt="" /></td><td><a title="Перейти в папку" href="'.$_SERVER['PHP_SELF'].'?dir='.$basedir.'/'.iconv("Windows-1251","UTF-8",$file).'">'.iconv("Windows-1251","UTF-8",rawurldecode($file)).'</a></td><td>Папка</td><td></td></tr>';
  }

  foreach ($files as $file) {
    echo '<tr><td><img src="./images/file.gif" alt="" /></td><td>'.iconv("Windows-1251","UTF-8",$file).'</td><td>Файл</td><td>'.getFileSize(filesize($file)).'</td></tr>';
  }
     echo "</table>";
}
artur4ek94 вне форума Ответить с цитированием
Старый 07.12.2016, 00:12   #8
artur4ek94
Пользователь
 
Регистрация: 11.11.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Что сейчас в URL?
Если входить в кирилической папке еще в подпапку то она не открывается, а адресной строке вот такое
Изображения
Тип файла: png Снимок.PNG (2.0 Кб, 13 просмотров)
artur4ek94 вне форума Ответить с цитированием
Старый 07.12.2016, 00:34   #9
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

rawurlencode – кодирует строку для URL (применяется при создании ссылки).
rawurldecode – декодирует закодированную строку из URL, возвращает её в исходный вид (применяется при разборе параметров из URL для их последующего использования в скрипте).
Andkorol вне форума Ответить с цитированием
Старый 07.12.2016, 01:09   #10
artur4ek94
Пользователь
 
Регистрация: 11.11.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
rawurlencode – кодирует строку для URL (применяется при создании ссылки).
rawurldecode – декодирует закодированную строку из URL, возвращает её в исходный вид (применяется при разборе параметров из URL для их последующего использования в скрипте).
Короче я так ничего и не понял... Ладно...
artur4ek94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не Могу Понять Что За Проблемы С Кодировкой? Lector111 Общие вопросы C/C++ 1 15.01.2014 01:42
Кодировка текста, не могу определиться с кодировкой spirit-ua Общие вопросы Delphi 15 30.07.2013 12:27
не могу разобраться feesta Помощь студентам 3 17.09.2011 23:46
Не могу разобраться Xoksik Общие вопросы по Java, Java SE, Kotlin 4 27.03.2011 23:36
Не могу разобраться Zmaxer Помощь студентам 24 10.10.2009 18:52