• Как скачать файл с кириллицей в URL?

    FlameStorm
    @FlameStorm
    Разработчик
    В моём случае целевая ссылка имела вид
    http://some.domain.org//Uploads/images/408/А,Б%20секция%203%20этаж%204%20квcrop.jpg

    т.е. смесь бульдога с носорогом - и слэши лишние, и нелатиница, и пробел в форме %20 .

    Помогло следующее решение, по мотивам Andr'U Sender :

    if (preg_match('#^([\w\d]+://)([^/]+)(.*)$#iu', $filenameSrc, $m)){
        $filenameSrc = $m[1] . idn_to_ascii($m[2], IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46) . $m[3];
    }
    $filenameSrc = urldecode($filenameSrc);
    $filenameSrc = rawurlencode($filenameSrc); 
    $filenameSrc = str_replace(array('%3A','%2F'), array(':', '/'), $filenameSrc);


    Замечу, что если пытаться использовать urlencode, а не rawurlencode, то тот кодирует пробелы в "+" плюсы и ссылка открываться не желала в таком виде. А с %20 как делает rawurlencode - прокатило.

    Надеюсь кому-то спасёт немного волос :)

    PS:
    Добавил ещё кусок кода - первые три строки ввиде блока if {...} (по наводке со стека) для поддержки кириллических (и др. национальных) доменов - теперь и http://сайт.рус/app/img/hero-bg.gif не страшен :)
    Ответ написан
    Комментировать