проблемы с символами (scandir, array_diff, foreach)

Я пытаюсь написать скрипт, который открывает каталог, сканирует все файлы (изображения) и отображает его на экране, но проблема в том, что он содержит символы в их именах, и scandir не может его обработать.

Это нормально для каталогов, где в их именах нет символов, скрипт работает отлично, но каталоги / файлы с символами в их имени — большая проблема.

Например, у меня есть всего 2 каталога, и все файлы в этих каталогах содержат одинаковые символы в их имени. Один содержит «®», а другой — «™», и каждый отдельный файл (изображение) имеет эти символы в своих именах, например: «Right® screen452217.jpg». Таким образом, переименование каталогов и файлов не вариант, это займет слишком много времени.

Может быть, есть лучший способ, но я делаю это прямо из URL на экране с $ _GET. Сейчас он находится на локальном сервере, я работаю на сервере VertrigoServ WAMP и сценарий выглядит так:

http://127.0.0.1/screenshots/index.php?page=Rights®
http://127.0.0.1/screenshots/index.php?page=Trade%20Marks™

$url = "screens/".$_GET["page"]."";
$scan = scandir($url, SCANDIR_SORT_NONE);
$scaned = array_diff($scan, array('.', '..', 'Thumbs.db'));

foreach($scaned as $shots) {

if ($shots <> "thumbnails") {

echo "<li>".PHP_EOL.
" <img width=\"253\" height=\"158\" src=\"".$url."\\".$shots."\"".
"  alt=\"".$shots."\" title=\"".$shots."\".
" </li>".PHP_EOL.PHP_EOL;

}

}

Scandir сообщает об этих ошибках:

The system cannot find the file specified. (code: 2)
failed to open dir: No such file or directory
No such file or directory

array_diff сообщает об этой ошибке:

Argument #1 is not an array

и, наконец, foreach отчет:

Invalid argument supplied for foreach()

Я также пытался изменить кодировку с mb_convert_encoding () а также Iconv (), но не повезло.

Мой лучший результат был после изменения URL, вместо того, чтобы использовать «®» или «™», я использовал Windows-1252 Справочник по кодировке ASCII:

http://127.0.0.1/screenshots/index.php?page=Rights%AE
http://127.0.0.1/screenshots/index.php?page=Trade%20Marks%99

Тогда все прошло без ошибок, но вместо показа изображений «img src» выглядит так:

screens/Rights�\Right�452217.jpg

что по-прежнему проблема, потому что изображения не отображаются. Мне нравится придерживаться Scandir, потому что я уже сделал страницу, но я не могу пройти через эти проблемы с символами. Не могли бы вы мне помочь ?

0

Решение

Это было на самом деле проще, чем я думал. Проблема была в том, что каталог уже был с символами в их именах, поэтому я должен изменить это на Windows-1252 следующим образом:

$page = $_GET["page"];

if (strpos($page, '®')) {$page = str_replace('®', '%AE', $page);}
if (strpos($page, '™')) {$page = str_replace('™', '%99', $page);}

Затем URL-адреса изменяются с:

http://127.0.0.1/screenshots/index.php?page=Rights®
http://127.0.0.1/screenshots/index.php?page=Trade%20Marks™

Для того, чтобы:

http://127.0.0.1/screenshots/index.php?page=Rights%AE
http://127.0.0.1/screenshots/index.php?page=Trade%20Marks%99

Тогда это было просто, просто добавьте кодировку после scandir и одну в foreach:

$url = "screens/".$_GET["page"]."";
$scan = scandir($url, SCANDIR_SORT_NONE);
$scaned = array_diff($scan, array('.', '..', 'Thumbs.db'));

$url = iconv("windows-1252", "UTF-8", $screen_uplay);

foreach($scaned as $shots) {

if ($shots <> "thumbnails") {

$shots = iconv("windows-1252", "UTF-8", $shots);

echo "<li>".PHP_EOL.
" <img width=\"253\" height=\"158\" src=\"".$url."\\".$shots."\"".
"  alt=\"".$shots."\" title=\"".$shots."\".
" </li>".PHP_EOL.PHP_EOL;

}

}

Просто как тот. Может быть, есть лучший способ, но это работает для меня, и я в порядке с этим.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]