Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] wyodrębnienie IMG z tekstu
marian84
post 28.01.2012, 19:14:49
Post #1





Grupa: Zarejestrowani
Postów: 185
Pomógł: 10
Dołączył: 29.01.2008

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


Witam!
Próbuję napisać funkcję, która przejrzy ciąg tekstu w html, a po odnalezieniu odnalezieniu "<img src itd", pobierze scieżke z src ale nic mi nie idzie. Macie może jakieś pomysły jak się za to zabrać ?

Go to the top of the page
+Quote Post
Necsord
post 28.01.2012, 19:25:51
Post #2





Grupa: Zarejestrowani
Postów: 189
Pomógł: 60
Dołączył: 5.10.2010
Skąd: Bydgoszcz

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


  1. $htmlContent = '...';
  2. $dom = new DOMDocument;
  3. $dom->loadHTML($htmlContent);
  4. foreach($dom->getElementsByTagName('img') as $key => $value)
  5. {
  6. echo $value->getAttribute('src');
  7. }
Go to the top of the page
+Quote Post
ShadowD
post 28.01.2012, 19:30:07
Post #3





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


@Necsord pierwszy raz widzę takie rozwiązanie jak się ma do wyrażeń regularnych?


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
Necsord
post 28.01.2012, 19:49:17
Post #4





Grupa: Zarejestrowani
Postów: 189
Pomógł: 60
Dołączył: 5.10.2010
Skąd: Bydgoszcz

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


Regexp jest zdecydowanie szybszy. Szybki google link: http://blog.kamilbrenk.pl/pobieranie-adres...z-innej-strony/
Niby polecany jest także phpQuery, ale nigdy nie próbowałem. ( Edit. phpQuery bazuje na DOMDocument. )

Ten post edytował Necsord 28.01.2012, 20:03:42
Go to the top of the page
+Quote Post
marian84
post 29.01.2012, 11:39:30
Post #5





Grupa: Zarejestrowani
Postów: 185
Pomógł: 10
Dołączył: 29.01.2008

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


OK, działa super. Teraz dalsza zagwozdka ... mam takie cuś:

  1. <?php
  2. $htmlContent='Lorem ipsum dolor sit amet, facere <img src="r1.gif" alt="jakiś opis" width="600px">dolores in fuerat accidens <img src="r2.gif">inquit merui litore <img src="r3.gif">est se vero quo. Hellenico clamabat vidit tam gratia de memor cresceret nomina petitus non ait in rei sensibilium. His auditorio iubet comprehenderent in deinde plectrum anni ipsa codicellos aperiri sacras. Est cum suam ut a his singulare eius sed, palpat venas tanquam vero non solutionem innocentem si non solutionem invenerunt. Adiuro me vero diam Apollonius.';
  3. if(preg_match('/<img src=/', $htmlContent))
  4. {
  5.  
  6. $dom = new DOMDocument;
  7. $dom->loadHTML($htmlContent);
  8. foreach($dom->getElementsByTagName('img') as $key => $value)
  9. {
  10. $obr=$value->getAttribute('src');
  11. $value->removeAttribute('width');
  12. $value->removeAttribute('src');
  13. $value->setAttribute('src', 'fotka.php?file='.$obr);
  14. }
  15. $htmlContent=$dom->saveHTML();
  16. echo $htmlContent;
  17. }
  18. ?>



Kod wyświetla zmienione obrazki i to jest ok, ale jak teraz dodać do <img> link, np do oryginalnego obrazu?
Go to the top of the page
+Quote Post
Necsord
post 29.01.2012, 11:57:56
Post #6





Grupa: Zarejestrowani
Postów: 189
Pomógł: 60
Dołączył: 5.10.2010
Skąd: Bydgoszcz

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


  1. $element = $dom->createElement('a');
  2. $element->setAttribute('href', 'http://google.pl');
  3. $clone = $image->cloneNode();
  4. $element->appendChild($clone);
  5. $image->parentNode->replaceChild($element, $value);


Ten post edytował Necsord 29.01.2012, 12:00:24
Go to the top of the page
+Quote Post
ShadowD
post 29.01.2012, 12:06:45
Post #7





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


Ohh, w takim razie wydajność tego rozwiązania w prost boli, @marian84 wchodziłeś na podany link?

Kod
Metoda / iteracje    1    10    100
DOM Document    3.8939    38.4944    399.2282
Wyrażenia regularne    0.0383    0.1597    1.6267


Różnica ~250 razy krotna może warto skorzystać z wyrażeń, przy 2-3 linkach i kilku stronach może to bez sensu, ale jak będziesz wykorzystywał ten kod mocniej na prawdę zastanów się, serwer będzie miał łatwiej, a Ty szybciej. ;-)


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
zegarek84
post 29.01.2012, 14:11:31
Post #8





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(ShadowD @ 29.01.2012, 12:06:45 ) *
Ohh, w takim razie wydajność tego rozwiązania w prost boli, @marian84 wchodziłeś na podany link?

Kod
Metoda / iteracje    1    10    100
DOM Document    3.8939    38.4944    399.2282
Wyrażenia regularne    0.0383    0.1597    1.6267


Różnica ~250 razy krotna może warto skorzystać z wyrażeń, przy 2-3 linkach i kilku stronach może to bez sensu, ale jak będziesz wykorzystywał ten kod mocniej na prawdę zastanów się, serwer będzie miał łatwiej, a Ty szybciej. ;-)

Właśnie, zależy co dokładnie masz zrobić, nie wszystko można prosto na wyrażeniach regularnych załatwić... a jeśli chodzi o DOM to z każdego z elementów musi powstać obiekt, i te obiekty muszą zostać powiązane w strukturę drzewa (cały dokument), więc co się dziwisz, że wyrażenia regularne tutaj są szybsze?? Poza tym w DOM masz jeszcze wygodę samej modyfikacji drzewa DOM...

Półśrodkiem tutaj gdzie można pokusić się o porównywanie z wyrażeniami regularnymi przy odpowiednim przechodzeniu przez dokument to porównywanie z PHP SAX - ale to musiałbyś umieć sobie ułożyć logikę zdarzeniowo, gdyż nie jest wczytywany dokument w całości. W przypadku PHP, SAX odnosi się do XML Parser


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
marian84
post 29.01.2012, 23:03:08
Post #9





Grupa: Zarejestrowani
Postów: 185
Pomógł: 10
Dołączył: 29.01.2008

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


@ShadowD - zawartość strony i tak wrzucam w cache więc jednorazowe przetworzenie nie wpłynie aż tak na wydajność i obciążenie serwera- ale dzięki za sugestię.
@Necsord- dzięki, wszystko działa jak powinno.
Go to the top of the page
+Quote Post
webdice
post 29.01.2012, 23:10:10
Post #10


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Cytat(ShadowD @ 29.01.2012, 12:06:45 ) *
Ohh, w takim razie wydajność tego rozwiązania w prost boli, @marian84 wchodziłeś na podany link?

Kod
Metoda / iteracje    1    10    100
DOM Document    3.8939    38.4944    399.2282
Wyrażenia regularne    0.0383    0.1597    1.6267


Różnica ~250 razy krotna może warto skorzystać z wyrażeń, przy 2-3 linkach i kilku stronach może to bez sensu, ale jak będziesz wykorzystywał ten kod mocniej na prawdę zastanów się, serwer będzie miał łatwiej, a Ty szybciej. ;-)


Nie trzeba tego kodu testować, aby stwierdzić że ten test jest z kosmosu.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 07:32