массивы — функция PHP in_array не распознает диакритический знак

У меня есть код, который проходит через файлы и получает все изображения.

$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, он не может найти диакритический знак.

1

Решение

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 с вашей кодировкой файловой системы.

4

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

Проблема заключается в хранении многобайтовых символов, таких как ö а также ü в файл 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";
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector