maxxtweek
@maxxtweek
Начинающий бекэнд разработчик

Не делается валидный протокол в URI,почему?

Всем доброго времени суток.
Есть список ссылок,у некоторых некорректно прописаны протоколы(http:/,https:/).
Нужно заменить на нормальные(добавить второй слеш).
Загружаю файл с юрлами,прохожусь массивом,делаю проверку и заменяю,но почему то не работает :С
foreach ($get_csv as $url) { 
    if(!strpos($url[0], '://')){
        $url[0]= str_replace(':/', '://', $url[0]);
    }
}

Есть ошибка в изначальном массиве
tTx-ognl6pM.jpg
После обработки все равно остается :С
yLN6v8R2-XE.jpg
Подскажите,пожалуйста,в чем загвоздка..
Заранее благодарю за ответы.
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
thewind
@thewind
php программист, front / backend developer
1. Нельзя проверять результат функции stripos на отрицательность таким образом. Она может вернуть 0, а это будет означать, что подстрока найдена на нулевом символе, а у вас будет в итоге "не удалось найти"

2. По сути - вы должны обратно $url вернуть в $get_csv в нужный ключ, т.е. надо так
foreach ($get_csv as $k => $url) { 
    if(!strpos($url[0], '://')){
        $get_csv[$k][0] = str_replace(':/', '://', $url[0]);
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
if(!strpos($url[0], '://')){

Внимание
Эта функция может возвращать как boolean FALSE, так и не-boolean значение, которое приводится к FALSE. За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
Ответ написан
Комментировать
$get_csv = [
    'http://vk.com',
    'https:/vk.com',
];

foreach ($get_csv as &$url) { 
    if(strpos($url, '://') === false) {
        $url = str_replace(':/', '://', $url);
    }
}

print_r($get_csv);


Array
(
    [0] => http://vk.com
    [1] => https://vk.com
)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы