PHP urlencode-кодирует только имя файла и не трогает косые черты
http://www.example.com/some_folder/some file [that] needs "to" be (encoded).zip
urlencode($myurl);
проблема в том, что urlencode
также будет кодировать косые черты, что делает URL непригодным для использования. Как я могу закодировать только последнее имя файла ?
3 ответов
попробуйте это:
$str = 'http://www.example.com/some_folder/some file [that] needs "to" be (encoded).zip';
$pos = strrpos($str, '/') + 1;
$result = substr($str, 0, $pos) . urlencode(substr($str, $pos));
вы ищете последнее появление знака косой черты. До это нормально, так просто скопируй это. И urlencode
остальные.
в первую очередь вот почему вы должны использовать rawurlencode
вместо urlencode
.
чтобы ответить на ваш вопрос, вместо того, чтобы искать иголку в стоге сена и рисковать не кодировать другие возможные специальные символы в вашем URL, просто Закодируйте все это, а затем исправьте косые черты (и двоеточие).
<?php
$myurl = 'http://www.example.com/some_folder/some file [that] needs "to" be (encoded).zip';
$myurl = rawurlencode($myurl);
$myurl = str_replace('%3A',':',str_replace('%2F','/',$myurl));
результаты в этом:
вытащить имя файла и избежать его.
$temp = explode('/', $myurl);
$filename = array_pop($temp);
$newFileName = urlencode($filename);
$myNewUrl = implode('/', array_push($newFileName));