В моём случае целевая ссылка имела вид
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
не страшен :)