Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Problem z str_replace
Forum PHP.pl > Forum > Przedszkole
kartun11
Witam, próbuje zrobić taki mały skrypt, który używa funkcji str_replace i mam mały problem.
Najpierw skrypt:
  1. <?php
  2.  
  3. $link1 = str_replace("images", "img", $link);
  4.  
  5. $delete = array("x", "y");
  6. $link2 = str_replace($delete, "", $link1);
  7.  
  8. print("<p align='center'><img src='".$link2."' /></p>");
  9.  
  10. ?>


Zmienna $link wysyłana jest z formularza. W formularzu wpisałem link do fotki http://www.xy.pl/images/123xy.jpg.
Teraz pojawia się dodatkowy problem. Prawdziwa fotka jest pod adresem: http://www.xy.pl/img/123.jpg Zauważcie, że w nazwie strony są te same znaki co w nazwie zdjęcia w pierwszym linku. Jak usunąć "x" i "y" tylko w nazwie foty?
Jedziemy dalej... Powiedzmy, że już udało mi się przerobić http://www.xy.pl/images/123xy.jpg na http://www.xy.pl/img/123.jpg i chce wyświetlić ten obrazek, ale go nie widzę. Zamiast czegokolwiek jest puste pole. Tak jak by nic nie zostało przesłane. Formularz jest zrobiony poprawnie bo już go testowałem jak uczyłem się robić formularze, więc nie mam pojęcia co jest przyczyną tego, że nie pojawia się kompletnie nic w zamian za zmienną $link2. Bardzo proszę o pomoc w rozwiązaniu tych dwóch problemów.
1. Zmienna się nie wyświetla.
2. Jak usunąć "x" i "y" tylko w nazwie foty?
Sabistik
Tytuł tematu nie spełnia wymagań regulaminu działu przedszkole. Zamykam. Po zgłoszeniu poprawnej formy któremukolwiek z moderatorów (wraz z linkiem do tego tematu) zostanie otwarty.
Cienki1980
Otwieram

Co do problemu.
Najprościej to będzie zrobić tak, że po pierwszym użyciu str_replace dzielisz otrzymany string za pomocą explode("/",$link1); i następnie usuwasz z ostatniej części tego stringa znaki x i y .. po czym znowu łączysz w jeden string za pomocą implode("/",$string_array);
Xniver
Można też za pomocą wyrażeń regularnych(chociaż nie jest to najwydajniejsze rozwiązanie). Masz tu przykład(wyrażenie pisane na szybko ,więc nie oczekuj cudów, ale testowałem i działa):
  1. <?php
  2. $link = 'http://www.xy.pl/images/123xy.jpg'; // Tu ten twój link
  3.  
  4. $photo = preg_replace('#http://.+.[a-z]{2,3}.+/(.+.[a-z]{3,4})#i', '1', $link); // Tutaj pobieramy nazwę zdjęcia
  5.  
  6. $photoNew = str_replace(array('x', 'y'), '', $photo);
  7.  
  8. $link = substr($link, 0, strlen($link) - strlen($photo)) . $photoNew;
  9.  
  10. echo $link;
  11. ?>
kartun11
Tylko, że ja nie wiem o co chodzi. Dopiero zaczynam str_replace i raczej mile widziany był by przykład. Czytałem trochę na php.net i się właśnie mocuje.
Najlepiej jak podam bardziej dokładniejszy link jaki chce zamienić.
http://serw.strona.pl/cache-thumb/EA/69/13540158_t.jpg chcę zamienić na http://serw.strona.pl/photos/EA/69/13540158.jpg.
Wiem, że nie wypada, ale może ktoś to napisać? Najlepiej się chyba nauczę na przykładzie konkretnym smile.gif
I chcę ten nowy link umieścić tu jako zmienna $link2
  1. <?php
  2. print("<p align='center'><img src='".$link2."' /></p>");
  3. ?>

Pamiętajcie, że oryginalny link wysyłany jest formularzem.

Edit:
Xniver, działa tylko jeszcze images miało być zmienione na img smile.gif Gdzie to wcisnąć?
I pojawił się jeszcze taki problem, że jak to zdjęcie jest na innym serwerze to zmieniona nazwa wygląda tak, że pokazuje ścieżkę do skryptu i zmienioną nazwę tego obrazka. Czyli http://www.innastrona.pl/skrypt/13540158.jpg a chciałem http://serw.strona.pl/photos/EA/69/13540158.jpg na innastrona.pl

W takiej sytuacji poszukam jeszcze jak użyć explode, ale mile widziane rozwiązanie w tym temacie.

EDIT2:
Rozwiązałem problem dzięki explode i implode smile.gif Trochę się naczytałem ale dział. Dzięki za pomoc. Mój skrypt wygląda następująco:
  1. <?php
  2.  
  3. $_POST['link'] = str_replace('cache-thumb', 'photos', $_POST['link']);
  4.  
  5. list($http, $blank, $adres, $cachephotos, $let1, $let2, $fota) = explode("/", $_POST['link']);
  6.  
  7. $fota = str_replace(array('_', 't'), '', $fota);
  8.  
  9. $array = array($http, $blank, $adres, $cachephotos, $let1, $let2, $fota);
  10.  
  11. $_POST['link'] = implode("/", $array);
  12.  
  13. print("<p align='center'><img src='".$_POST['link']."' /></p>");
  14.  
  15. ?>
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.