Polskie znaki w generowanym linku do zasobu i do zdjęć

0

Usiłuję zmusić PHP do obsługi PL znaków w nazwach wysyłanych zdjęć.

Link do paczki generuję tak:

 $k = rawurlencode($folder_bazowy.'/class/'.$classId.'/'.$eventName);
		echo "<a href='$k'>Link do zasobu</a>";

Z polskimi znakami nie działa. Jest od razu błąd 404. Z poziomu FTP strony ściephpżka istnieje.

Wyswietlanie nie działa poprawnie do końca. Tzn. do folderu z polskimi znakami wejść mogę.
Widzę listę plików JPG z polskimi znakami ale gdy w jpg kliknę to znowu mam 404.
Jeśli zamienię rawurlencode na encode to nie działa link do zdjęcia i tak, za to do folderu
też się psuje...

$ileZdj = 0;
foreach ($files as $file) {
    if ($file != '.' && $file != '..') {
        $filePath = $realDir . '/' . $file;
        $fileInfo = pathinfo($filePath);
        if (isset($fileInfo['extension']) == false) {
            $fileExtension = "";
            $encodedFile = urlencode($file);
            echo "<a href='$encodedFile'>Folder $file</a> <br> ";
            continue;
        } else {
            $fileExtension = strtolower($fileInfo['extension']);
        }
        if (in_array($fileExtension, ['jpg', 'jpeg', 'png'])) {
            $encodedFile = urlencode($file);
            echo "<a href='$encodedFile'>Zdjęcie $file</a> <br> ";
            $ileZdj++;
        }
    }
}

Ktoś ma pomysł?
Mogę na priv pokazać link i o co chodzi w formularzu.

0

Problem nie leży w generowaniu linka, tylko w tym że nie do końca wiesz pod jakim URL są serwowane Twoje pliki na twoim serwerze.

Jak plik nazywa się żółty.jpeg, to pod jakim linkiem on jest dostępny?

0

Pod wybraną klasą i nazwą wydarzenia

np: 1A/Test/Żółty

screenshot-20231123150122.png

I podgląd działa:

screenshot-20231123150146.png

Ale link już nie:

http://mojadresstrony/adresskryptu//%2Fwz%2Fclass_room_data%2F1A%2FTest

0

Wrzuciłem obrazek o nazwie ąsasin.png, i widzę że link do niego to: /wz/class_room_data/1A/%C4%85sasin/%C4%85sasin_1A_1.png.

Więc nie powinieneś zamieniać / na %F2, powinieneś zamienić tylko i wyłącznie elementy ścieżki.

<?php

function url(array $paths): string {
    return implode('/', \array_map('urlEncode', $paths));
    // return implode('/', \array_map('rawUrlEncode', $paths));
}

$imageUri     = url(['wz', 'class_room_data', '1A', 'ąsasin', 'ąsasin_1A_1.png']);
$directoryUri = url(['wz', 'class_room_data', '1A', 'ąsasin']);

echo "<a href='$imageUri'>Link do zasobu</a>";
0

jest ok. ale jest dalej mały szkopuł zobacz :

teraz nazwa zdjęcia w URL to: class_room_data/1A/Dzień+życzliwości_1A_1.jpg

a powinno być: class_room_data/1A/Dzień życzliwości_1A_1.jpg (spacja)???? ....

bez tego symbolu plusa, skąd on się tam bierze?

//edit//
jak tak myślę teraz to przecież w linku powinna być nazwa do pliku bez cudowania z polskimi znakami czy nie?

//edit2//
Udało się rozwiązać całkowicie problem. Wystarczyło dla funkcji URL kodowanie znaków po: rawurlencode i teraz wszystko działa poprawnie.

CAŁY KOD:

function url(array $paths): string {
    return implode('/', array_map('urlEncode', $paths));
}

foreach ($files as $file) {
    if ($file != '.' && $file != '..') {
        $filePath = $realDir . '/' . $file;
        $fileInfo = pathinfo($filePath);
        if (isset($fileInfo['extension']) == false) {
            $fileExtension = "";
            $encodedFile = url([$file]);
            echo "<a href='$encodedFile'>Folder $file</a> <br> ";
            continue;
        } else {
            $fileExtension = strtolower($fileInfo['extension']);
        }
        if (in_array($fileExtension, ['jpg', 'jpeg', 'png'])) {
            $encodedFile = url([$file]);
            echo "<a href='$encodedFile'>Zdjęcie $file</a> <br> ";
            $ileZdj++;
        }
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1