У меня есть код, который проходит через файлы и получает все изображения.
$img = '/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/2018_07_DogOwner_VS_CatOwner_655x368_NL-500x281.jpg';
$dir = preg_replace('#[^/]*$#', '', $img);
$image_files = scandir($dir);
$image_name = @array_pop(explode('/', $img));
$find = $image_name;
var_dump(in_array($find, $image_files));
В этом примере я бегу только через одно изображение. Этот код возвращает истину. Проблема в том, что у меня есть изображение с немецкими знаками (hundezubehör-für-sommer.jpg).
$img = '/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/hundezubehör-für-sommer.jpg';
Это возвращает ложь. Есть идеи, почему это не работает?
Редакция:
Я задал этот вопрос несколько дней назад: Как найти кратчайшее имя (строку) одного и того же изображения с разными именами. Решение этого здесь: https://3v4l.org/T7lfU. Я думаю, что проблема в том, что когда я запускаю код из scandir, он не может найти диакритический знак.
in_array
Функция работает несмотря на алфавит строк. У меня проблема возникает из-за того, что ваш PHP-файл и файловая система используют разные кодировки, поэтому значение, читаемое scandir
имеет другую кодировку, поэтому она отличается от $img
значение написано в коде.
Попробуйте преобразовать кодировку scandir
результат, чтобы он соответствовал кодировке файла PHP. Например:
// ...
$image_files = scandir($dir);
foreach ($image_files as &$file) {
$file = mb_convert_encoding($file, 'UTF-8', 'Windows-1251');
}
// ...
var_dump(in_array($find, $image_files));
замещать UTF-8
с кодировкой файла PHP и Windows-1251
с вашей кодировкой файловой системы.
Проблема заключается в хранении многобайтовых символов, таких как ö
а также ü
в файл PHP.
Вы можете попробовать интерпретировать строку как многобайтовую:
$img = utf8_encode('/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/hundezubehör-für-sommer.jpg');
Кодирование, затем декодирование, чтобы сделать его более безопасным:
$img = html_entity_decode('/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/hundezubehör-für-sommer.jpg');
Или косой черты лица:
$img = "/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/hundezubeh\303\266r-f\303\274r-sommer.jpg";