Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Podmiana ciągu
Tomash29
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 31.08.2012

Ostrzeżenie: (0%)
-----


Witam

Od jakiegoś czasu staram sie wykonać skrypt, który pobierał by część kodu z innej strony, przekształcał go i umieszczał na mojej stronie.
Sprawa niby prosta, ale utknąłem na jednej żeczy.
Ciag znaków, przed podmianą, wyglada np. tak:

href="http://33.333.333.33/$%@AAAA

a po podmianie:

href="http://444.44.44.444/#^%#$#DFER/AAAABBBB

Nie wiem jakiej funcji użyć, żeby wstawić ciąg znaków na końcu (tytaj oznaczony jako BBBB)
Część oznaczona jako AAAA jast stała dla obu ciągów i składa się od jednego do czterech znaków.

Wiem jak doprowadzić wszystko do momentu:

href="http://444.44.44.444/#^%#$#DFER/AAAA

i poprawnie wyświetlić na mojej stronie.

Z góry dziękuję za każdą pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
czychacz
post
Post #2





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


$string .= 'BBBBBBBBBBBBBB'?
jeśli nie o to chodziło, to wytłumacz jeszcze raz
Go to the top of the page
+Quote Post
Tomash29
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 31.08.2012

Ostrzeżenie: (0%)
-----


Opisze dokładniej:

Mam:

http://12.345.678.900/?161
http://12.345.678.900/?22
http://12.345.678.900/?3

A chcę otzymać:

http://192.168.44.569/user/nolan/161&run
http://192.168.44.569/user/nolan/22&run
http://192.168.44.569/user/nolan/3&run

Udało mi się uzyskac:

http://192.168.44.569/user/nolan/161
http://192.168.44.569/user/nolan/22
http://192.168.44.569/user/nolan/3

Nie potrafię dodać końcówki, w tym przykładzie &run
Kombinuję z str_replace:

$content = str_replace('http://192.168.44.569/user/nolan/+([0-9]{1,3})', 'http://192.168.44.569/user/nolan/+([0-9]{1,3})&run', $content);

Ale coś robię nie tak...

Pozdrawaim

Ten post edytował Tomash29 31.08.2012, 17:31:18
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #4





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  1. $string = 'http://192.168.44.569/user/nolan/161'; // jak już masz ciąg taki pod jakąś zmienną
  2. $string .= '&run'; // dodaj tylko tak
  3. echo $string;
Go to the top of the page
+Quote Post
Tomash29
post
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 31.08.2012

Ostrzeżenie: (0%)
-----


Tylko że tych ciągów mam ponad 1000...

http://192.168.44.569/user/nolan/1
http://192.168.44.569/user/nolan/...
http://192.168.44.569/user/nolan/1150

I dla każdego trzeba napisać działanie oddzielnie??
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #6





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Nie mam pojęcia, bo nie wiem jak to robisz, ale myślę, że nie trzeba dla każdego oddzielnie, pokaż kod.
Go to the top of the page
+Quote Post
abort
post
Post #7





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Czy zawsze jest tak, że:
- w źródle jest http://12.345.678.900/?161 (zawsze ten sam IP i jedna liczba po pytajniku)
- chcesz uzyskać inny http://192.168.44.569/user/nolan/161&run - czyli: inny adres IP i tę samą liczbę co była w źródle (poprzedzoną pewnym tekstem i doklejonym innym tekstem)

Jeśli tak (bo tak zrozumiałem Twój problem), to powinno zadziałać:
  1. <?php
  2.  
  3. $from = array (
  4. 'http://12.345.678.900/?161',
  5. 'http://12.345.678.900/?22',
  6. 'http://12.345.678.900/?3'
  7. );
  8.  
  9. foreach ($from as $url) {
  10. $new = preg_replace ('#12.345.678.900#', '192.168.44.569', $url);
  11. $cel = preg_replace ('#(.*)/\?(\d+)$#', '\\1/user/nolan/\\2&run', $new);
  12. echo $cel . '<br>';
  13.  
  14. }
  15. ?>

To co chciałeś, rozbiłem na dwa preg_replace, nie chce mi się myśleć nad zrobieniem tego w jednej instrukcji, choć oczywiście nie jest to trudne. Swoją drogą, byłeś na dobrej drodze (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Tomash29
post
Post #8





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 31.08.2012

Ostrzeżenie: (0%)
-----


Dzięki, o to chodziło :-)

Teraz kombinuję jak wyciągnąć dane ze strony. Ponieważ te linki:

http://12.345.678.900/?161
http://12.345.678.900/?...
http://12.345.678.900/?3

znajdują się w kodzie strony *.php wraz z innymi danymi.
Wymyśliłem coś takiego:

<?php
// Pobieranie zawartości <a>

$content = file_get_contents('http://xx.xxx.xxx.xxx/strona.php');

preg_match_all('/<a.*href=\"http:\/\/12.345.678.900\/?(\d{1,3})<\/a>/', $content, $links);

$from = array ($links);

foreach ($links as $url) {

//$new = preg_replace ('#12.345.678.900#', '192.168.44.569', $url);
//$cel = preg_replace ('#(.*)/\?(\d{1,3})#', '\\1/user/nolan\\2&run', $new);

echo $cel . '<br>';

}

?>

Ale albo coś źle wpisuję, albo idę w złym kierunku...
Jedyne co wyświetla mi się na stronie to "Array"
Może jest na to lepszy sposób??

Ten post edytował Tomash29 1.09.2012, 18:20:04
Go to the top of the page
+Quote Post
abort
post
Post #9





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Ale po co dajesz kod $from = array ($links); ?
$links o już jest tablica, instrukcja preg_match_all o to zadbała (IMG:style_emoticons/default/smile.gif)
Poza tym, zrób sobie print_r ($tablica) i zobacz, co w niej jest.
Go to the top of the page
+Quote Post
Tomash29
post
Post #10





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 31.08.2012

Ostrzeżenie: (0%)
-----


OK

to mam:

preg_match_all('#<a(.*)</a>#s', $content, $links);

i po wbiciu:

print_r($links);

wyświetla:

<a href='http://12.345.678.900/?292'>(xxx) xxx xxx xxxx xxr</a> <a href='http://12.345.678.900/?298'>(xxx) xxx xxx xxxx xxr</a><br> <a href='http://12.345.678.900/?456'>(xxx) xxx xxx xxxx xxr</a><br> <a href='http://12.345.678.900/?225'>(xxx) xxx xxx xxxx xxr</a><br> <a href='http://12.345.678.900/?456'>(xxx) xxx xxx xxxx xxr</a><br> <a href='http://12.345.678.900/?548'>(xxx) xxx xxx xxxx xxr</a><br>

Więc prawidłowo. Niestety po zastosowaniu:

$new = preg_replace ('#12.345.678.900#', '192.168.44.569', $links);
$cel = preg_replace ('#(.*)/\?(\d+)$#', '\\1/user/nolan/\\2&run', $new);

Wyświetla:

Array ( [0] => Array [1] => Array )

lub:

Array

jak próbuje odczytać dane z tabeli 1 lub 0...





Go to the top of the page
+Quote Post
abort
post
Post #11





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Awidzisz... Ty to masz w jednej linii, moje wyrażenie ma w sobie "$" - ma sprawdzać do końca linii. Jak miałem wyniki w tablicy, wszystko było OK. Po prostu nie wiedziałem, w jakiej postaci mam się spodziewać danych, a to zależy od zawartości pliku - więc się skupiłem na wyrażeniu regularnym.

Ty musisz zrobić jeszcze dwie rzeczy:
1. przed pętlą foreach dodać:
  1. $from = preg_match_all ("#<a href=.*?</a>#", $links, $matches);

Zakładam, że $links to jest ta zmienna, którą wypluwasz na ekran przez print_r - rozbite odnośniki masz w tablicy $matches, ale jak sobie ją rozbijesz, to z ciekawości sobie ją wyświetl, bo to jest tablica tablic (tak, takie coś) (IMG:style_emoticons/default/smile.gif)

2. Musisz do foreach przekazać tablicę z odnośnikami, którą rozbiłeś w punkcie 1:
  1. foreach ($matches[0] as $url) { // i dalej to, co napisałem we wcześniejszym poście.

Jeżeli zrobisz sobie wcześniej print_r ($matches), to będziesz wiedział, dlaczego tak trzeba to zapisać.

W ogóle, print_r i var_dump Teoimi przyjaciółmi... (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 21:57