Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zamiana stringu z adresem pliku na kod html
Forum PHP.pl > Forum > Przedszkole
stardar
Dzień dobry.

Mam na stronie tekst, w którym w bliżej nieokreślonym miejscu znajduje się luzem string o strukturze:

https://sub.domena.com/vid/nazwa.mp4

Potrzebuję znaleźć ten tekst, wyciągnąć z niego nazwę pliku, po czym cały string zamienić na:

  1. <div class="video">
  2. <video class="video" controls poster="./vid/nazwa.jpg">
  3. <source src="./vid/nazwa.mp4" type="video/mp4">
  4. </video>
  5. </div>


Wiem, interesowny jestem, ale czy mógłby mi ktoś napisać w PHP kod do tej zmiany i wyjaśnić pokrótce?

Z góry dziękuję!

D.
trueblue
Analogicznie do przykładu z <img> i <picture>: https://kawalekkodu.pl/the-tag-is-out-there...domxpath-s01e03
stardar
Dzień dobry TrueBlue smile.gif

Chodziło mi raczej o coś podobnego do:

  1. preg_replace('~<iframe[^>]*\K(?=src)~i','data-',$text);


w którym zamieniam src z ciągu na data-src, bo ten oczekiwany preg_relace ma być częścią bloku listowania treści smile.gif
SmokAnalog
Dużo lepiej to robić parserami DOM niż wyrażeniami regularnymi, dlatego kolega zaproponował to.
kreatiff
Jeśli już obrabiasz sam tekst (bez znaczników html), to regex będzie w porządku (w zasadzie będzie jedynym sensownym rozwiązaniem). Ale jeśli zmieniasz ten tekst w np. całym kodzie strony, to już najpierw warto dobrać się do kodu html za pomocą np. DOMDocument i w nim szukać tego konkretnego węzła z tekstem i po znalezieniu zmieniać jego zawartość.
Tu masz coś, co może zadziałać, dopasuj wedle potrzeby. Nie przetwarzaj tym całego kodu strony, bo może się zrobić galimatias. Porób sobie var_dump() w różnych miejscach, gdy nie jest jasne co się wzięło skąd.
  1. $text = 'Jakiś tam tekst z linkiem <a href="http://link.do.wideo/wideo.mp4" target="_blank">http://link.do.wideo/wideo.mp4</a> - koniec';
  2. $replace = function(string $name) : string
  3. {
  4. return '
  5. <div class="video">
  6. <video class="video" controls poster="./vid/' . $name . '.jpg">
  7. <source src="./vid/' . $name . '.mp4" type="video/mp4">
  8. </video>
  9. </div>
  10. ';
  11.  
  12. };
  13.  
  14. preg_match_all('#(https?://.*/(.*?)\.mp4)#', $text, $matches);
  15.  
  16. foreach ($matches[1] as $k => $match) {
  17. $text = str_replace($match, $replace($matches[2][$k]), $text);
  18. }
stardar
O to właśnie mi chodziło. Działa idealnie, dziękuję Ci bardzo.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.