Как программно префикс URL изображения с PHP?

Я работаю с PHP и API на основе JSON, который возвращает 2 поля со значениями для фотографий свойств:

  1. PHOTO_URL
  2. has_large

Photo_url — это URL фотографии обычного размера.

Пример: https://secure.example.org/Directory/AnotherDirectory/0008/102/12.jpg

Если has_large = true, то мы знаем, что большая фотография существует, но API не возвращает конкретный URL.

Однако из документации API мы знаем, что если мы добавим префикс «L» к имени файла изображения, это даст нам правильный URL-адрес большого изображения:

Пример: https://secure.example.org/Directory/AnotherDirectory/0008/102/L12.jpg

Как я могу программно префиксить имена файлов буквой L, прежде чем записывать их в базу данных (MySQL)?

Замечания: Структура URL практически одинакова для всех фотографий.

Единственные части URL изображений, которые изменяются для каждого свойства:

  1. Каталог 4-го уровня, который определяет ID свойства (В приведенном выше примере — 102)
  2. Само имя файла, максимум 3 цифры (В приведенном выше примере URL — 12.jpg).

После нескольких часов исследований RegEx, preg_replace () и поиска аналогичных решений в StackOverflow, я все еще не уверен, как сделать это правильно с помощью PHP.

Любая помощь будет оценена. Заранее спасибо.

0

Решение

Кажется, вам нужно только добавить имя файла (без пути) с L, Имя файла без пути — это что угодно, только не / в конце строки, которая в регулярном выражении выглядит ([^\/]+)$, Поэтому желаемая функция замены:

$large_photo_url = preg_replace('/([^\/]+)$/', 'L$1', $photo_url);
2

Другие решения

Здесь мы используем explode функция, чтобы split строка на / а затем добавление L в самом конце значение этого массива.

Решение 1:

Попробуйте этот фрагмент кода здесь

<?php

$link="https://secure.example.org/Directory/AnotherDirectory/0008/102/12.jpg";
$portions=explode("/",$link);
$portions[count($portions)-1]="L".$portions[count($portions)-1];
print_r(implode("/", $portions));

Решение 2:

Regex: ([^\/]+)$

1. ([^\/]+) соответствовать всем до /(не включая это), здесь круг () фигурные скобки будут захватывать первый захваченный результат в $1,

2. $ конец строки

Regex demo

<?php

$link="https://secure.example.org/Directory/AnotherDirectory/0008/102/12.jpg";
echo preg_replace("/([^\/]+)$/", 'L$1', $link);
1

По вопросам рекламы [email protected]