RasPi / Win10 кодировка имен файлов (cifs) PHP - PullRequest
0 голосов
/ 30 июня 2018

все!

Я не могу понять это, и сейчас я очень озадачен обработкой кодировки. Следующая конфигурация:

a) Windows 10 с Apache, PHP и MySQL - внешний жесткий диск USB, опубликованный как «video1», с видеофайлами, содержащими метаинформацию о содержимом в имени файла - также содержащими специальные символы (то есть немецкие умляуты).

PHP-скрипт рекурсивно читает (scandir) все имена файлов и отображает (utf8_encode) извлеченную метаинформацию через html. Этот скрипт работает как шарм уже несколько лет.

б) RasPi 2 с Apache, PHP и MySQL - тот же жесткий диск, смонтированный (cifs) в /mnt/video1.

Тот же скрипт выполняется, но отображает нечетные символы. Если я уберу utf8_encode, то дисплей будет странным на стороне Win10, но корректным на стороне RasPi. Что мне нужно сделать, чтобы скрипт работал на на обоих серверах?

Пример сценария: (изменить только $ directory = ... для Windows и RasPi)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>

  <HEAD>
    <?php include("metatags.txt"); ?>
    <TITLE>Charset Test</TITLE>
  </HEAD>

  <BODY>

<?php
  function scan_dir_recursive( $dir, $result ) {
    //echo "Entering: " . $dir . "<BR>";
    $direntries = scandir( $dir );
    //echo "Entries: "; var_dump( $direntries ); echo "<BR>";
    foreach ( $direntries as $entry ) {
      if ( is_dir( $dir . $entry )) {
        if (( $entry <> "." ) and ( $entry <> ".." )) {
          $result = scan_dir_recursive( $dir . $entry . "/", $result );
        }
      }
      if ( is_file( $dir . $entry )) {
        //echo( "<B> + " . $dir . $entry . "</B><BR>" );
        $result[] = $dir . $entry;
      }
    }
    //echo "Result: "; var_dump( $result ); echo "<BR>";
    return $result;
  }

  function displayheader( $mode ) {
    switch ( $mode ) {
      case 1:
        echo( "unverändert" );
        break;
      case 2:
        echo( "utf8_encode" );
        break;
      }
  }

  function displayentry( $entry, $mode ) {
    switch ( $mode ) {
      case 1:
        $result = $entry;
        break;
      case 2:
        $result = utf8_encode( $entry );
        break;
    }
    echo $result;
  }

  $directory = "//192.168.1.20/video1/charset/";
  //$directory = "/mnt/video1/charset/";
  $videolist = array();
  $videolist = scan_dir_recursive( $directory, $videolist );
?>

<?php
  for ( $t = 1; $t <= 2; $t++ ) {
?>
    <TABLE>
      <TR>
        <TH><?php displayheader( $t );?></TH>
      </TR>
<?php
  foreach ( $videolist as $entry ) {
?>
      <TR>
        <TD><?php displayentry( $entry, $t );?></TD>
      </TR>
<?php
  }
?>
    </TABLE>
<?php
  }
?>

  </BODY>

</HTML>

Скрипт отображает список правильно с помощью utf8_encode, но отображает черные точки с помощью "?" без. RasPi, с другой стороны, отображает правильный список без кодировки, но с 2-байтовым мусором («A» с ~ выше плюс 2-й символ) с использованием кодировки. «Ls -la» в CLI RasPi также отображает правильные имена файлов, как и «dir» на ПК с Windows.

Любая помощь приветствуется, спасибо!

Michael

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...