Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Wyszukanie i zaawansowana zamiana w ciągu znaków
Armorek
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 1.11.2011

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


Witam, chciałbym mając jakiś tekst w formie HTML gdzieś w jakiejś zmiennej, tak jakby przefiltrować, wyszukać
  1. <img .... class="klasa"...>

czyli obrazek tylko z konkretna klasą, chciałbym pobrać jego parametry i zachować np. pobrać jego src="link", po adresie chcę sprawdzić rozmiary
  1. list($width, $height) = getimagesize($link);

oczywiście jeżeli nie ma w obrazku styli to chciałbym je stworzyć a jeżeli już są też je jakoś zachować dodając do stylu $width i $height, tak żeby było to w miarę uniwersalne.
Myślę że trzeba by użyć regexp ale do końca to nie wiem jak
powiedzmy chce zrobić coś w tym stylu:
  1. <?php
  2. $string = $item->text;
  3.  
  4. $pattern = '/<img(.*?)src="(.*?)"(.*?)style="(.*?)"(.*?)class="dopasowywana_grafika"(.*?)>/';
  5. $replacement = '$2';
  6. $link = preg_replace($pattern, $replacement, $string);
  7.  
  8. list($width, $height) = getimagesize($link);
  9.  
  10. $replacement = '/<img$1src="$2"$3style="$4 width:100%; max-width: $width px; max-height:$height px;"$5$6>/';
  11. $string = preg_replace($pattern, $replacement, $string);
  12.  
  13. echo $string;
  14. ?>

oczywiście to było tylko takie zebranie kodu i dopiero kombinowanie co będzie mi potrzebne i jak użyć ale żebyś czytając to zrozumiał co chcę zrobić, bo kod oczywiście działać nie ma prawa (IMG:style_emoticons/default/tongue.gif) Kwestia tego że nie wiem jakie dobrać funkcje i jak mógłbym to sklecić żeby tak wyciągnąć osobno link do sprawdzenia obrazka a potem przerobić kod obrazka z dodatkowymi stylami itd. a potem wpleść to spowrotem
Proszę o pomoc i pozdrawiam.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #2





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(Armorek @ 1.11.2011, 23:24:31 ) *
Myślę że trzeba by użyć regexp

Nie, nie i jeszcze raz NIE.
Do takich rzeczy jest PHP::DOMDocument
Go to the top of the page
+Quote Post
Armorek
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 1.11.2011

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


hmmm no fajnie ale z tym to akurat nigdy do czynienia nie miałem i nie wiem jak z tego skorzystać, po przykładach nie widzę niczego odpowiedniego. Więc nie wiem.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #4





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Pytaj.
Go to the top of the page
+Quote Post
Armorek
post
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 1.11.2011

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


Cytat
Kwestia tego że nie wiem jakie dobrać funkcje i jak mógłbym to sklecić żeby tak wyciągnąć osobno link do sprawdzenia obrazka a potem przerobić kod obrazka z dodatkowymi stylami itd. a potem wpleść to spowrotem

Wydawało mi się że mój 1 post jest pytaniem. Problem polega na tym że samo odesłanie mnie do jakiejś funkcji której nie znam i której przykłady zdają mi się być nieprzydatne nie załatwi sprawy. (IMG:style_emoticons/default/aarambo.gif) Tam widzę jakiś zapis do XML itd... a ja nie chcę zbytnio ingerować w to co mam.
Chce sobie coś zrobić w Joomli. Zrobiłem sobie regexp który jakby załatwia to co mniej więcej tu napisałem w normalnych artykułach. Problem polega na tym że dany komponent nie chce poprawnie działać dla modułu w którym też wstawiam taką grafikę, więc postanowiłem to zrobić ręcznie w PHP. Mogę też ręcznie styl do grafiki wstawiać taki jak chcę ale takie coś ułatwiłoby sprawę. Chodzi o to, że nie obrażając nikogo, odpowiedź którą jak na razie otrzymałem można porównać z czymś w stylu: "użyj do tego PHP".
Dla tego poproszę o jakiś przykład na to co opisałem, żebym mógł to jakoś wykorzystać, zaadoptować to sobie już jakoś zaadoptuje.
Go to the top of the page
+Quote Post
by_ikar
post
Post #6





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Osobiście całość zrobiłbym za pomocą phpQuery. Jeżeli miałeś doczynienia kiedykolwiek z jQuery i wiesz jak się dobrać do konkretnych elementów, to phpQuery będzie ci się podobać. I w sumie rozwiązać można to w kilkunastu linijkach.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #7





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(Armorek @ 2.11.2011, 03:32:35 ) *
Wydawało mi się że mój 1 post jest pytaniem. Problem polega na tym że samo odesłanie mnie do jakiejś funkcji której nie znam i której przykłady zdają mi się być nieprzydatne nie załatwi sprawy. (IMG:style_emoticons/default/aarambo.gif) Tam widzę jakiś zapis do XML itd... a ja nie chcę zbytnio ingerować w to co mam.
Chce sobie coś zrobić w Joomli. Zrobiłem sobie regexp który jakby załatwia to co mniej więcej tu napisałem w normalnych artykułach. Problem polega na tym że dany komponent nie chce poprawnie działać dla modułu w którym też wstawiam taką grafikę, więc postanowiłem to zrobić ręcznie w PHP. Mogę też ręcznie styl do grafiki wstawiać taki jak chcę ale takie coś ułatwiłoby sprawę. Chodzi o to, że nie obrażając nikogo, odpowiedź którą jak na razie otrzymałem można porównać z czymś w stylu: "użyj do tego PHP".
Dla tego poproszę o jakiś przykład na to co opisałem, żebym mógł to jakoś wykorzystać, zaadoptować to sobie już jakoś zaadoptuje.


Drogi Przyjacielu.
Jesteś śmierdzącym leniem i nie można na to spokojnie patrzeć.
Takie gadanie może działa na Twoją nauczycielkie Języka polskiego, kiedy to będąc nieprzygotowany do odpowiedzi próbujesz wmówić, ze ona jest winna.

Czy przynajmniej wpisałeś w wyszukiwarce na tym forum "Dom Document" celem przeczytania co już się tu u nas na ten temat powiadało w przeszłości?
Jest to pytanie retoryczne, wszyscy doskonale wiemy że tego nie zrobiłeś, twoje śmierdzące lenistwo Cię przed tym powstrzymuje.

Załączam serdeczne pozdrowienia.

Pytaj dalej.
Go to the top of the page
+Quote Post
Armorek
post
Post #8





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 1.11.2011

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


Drogi wNogachSpisz i chyba za dużo się nawąchałeś. Nie będę zniżał się do twojego poziomu i komentował twojej wypowiedzi, bo kim że jesteś żeby mnie móc oceniać, to pytanie retoryczne bo doskonale wiadomo że nikim. Aha... i jeszcze dopowiem że sprawdzałem bo opcję szukam znam i niejakie google też kojarzę, oraz takie coś jak PHP Manual. Odpisałem coś na twoją "pomoc" ale chyba nie zrozumiałeś. Pozdrawiam (IMG:style_emoticons/default/happy.gif)

by_ikar niestety nie znam, jeszcze poszukam.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #9





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(Armorek @ 2.11.2011, 13:53:11 ) *
sprawdzałem bo opcję szukam znam

Doskonale.
Skoro tak mówisz, to na pewno tak było!
Co znalazłeś w wynikach wyszukiwania?
Czego jeszcze nie rozumiesz?
W dalszym ciągu czekam na dobre pytania.
Twoja taktyka "nic nie rozumiem, zróbcie to za mnie", jak sam widzisz, nie skutkuje.
Go to the top of the page
+Quote Post
Armorek
post
Post #10





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 1.11.2011

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


drogi wNogachSpisz niepotrzebnie skupiłem się na twojej "pomocy", rozwiązałem to w taki sposób
  1. function konwertuj($znalezione)
  2. {
  3. list($width, $height) = getimagesize($znalezione[1]);
  4. $podmiana_kodu = '<img src="'. $znalezione[1] .'" style="'. $znalezione[2] .' width:100%; max-width:'. $width .'px; max-height:'. $height .'px;" />';
  5. return $podmiana_kodu;
  6. }
  7.  
  8. function zamiana($tekst)
  9. {
  10. $tekst = preg_replace_callback('/<img.*?src="(.*?)".*?style="(.*?)".*?class="dopasowywana_grafika".*?>/','konwertuj',$tekst);
  11. return $tekst;
  12. }

http://www.blog.bmedon.net/index.php/php/j...ciagu-zmiennej/
działa tak jak chciałem.
Jako że zrobiłem sobie to bez twojej pomocy pozostaje mi napisać wNogachSpisz spie*dalaj nadęty nieprzydatny bucu. (IMG:style_emoticons/default/laugh.gif) ale dzięki za chęci i pozdrawiam.

by_ikar też dzięki ale zanim bym się zapoznał... niektórzy nie maja po prostu czasu żeby zmarnować go na to bo np. rzeczy związane z informatyka to niedzielne hobby.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #11





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Wyrażenia regularne to niewłaściwe narzędzie do tego zadania.

Jeśli wiążesz swoją przyszłość z programowaniem, to nadejdzie dzień gdy przynasz, że to rozwiązanie nie jest dobre.
Niestety przy Twoim podejściu trzeba czekać jeszcze wiele lat (IMG:style_emoticons/default/smile.gif)
Koniecznie chcesz to zrobić po swojemu, mimo że jest źle - droga wolna.

P.S
Twój kod nie zadziała jeśli znacznik img będzie kończył się np. ">" zamiast "/>".
Tak samo nie zadziała jeśli wewnątrz znacznika wkradnie się jakiś tabulator.
I wiele, wiele innych!
Twój kod któregoś słonecznego dnia przestanie działać, jego zdebugowanie będzie bardzo trudne.

Pozdrowienia.
Go to the top of the page
+Quote Post
Armorek
post
Post #12





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 1.11.2011

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


(IMG:style_emoticons/default/laugh.gif) ho ho ho ktoś nie potrzebuje twojej pomocy to się obudziłeś, nagle taki pomocny chcesz być. Owszem chcę to zrobić po swojemu bo jak do tej pory nie widzę żebyś pokazał jak to zrobić po twojemu poza zgrywaniem ważniaka.
Akurat tak się składa że mimo dodania atrybutów do img nadal jest dobrze, widocznie nie zrozumiałeś o co mi chodzi i czego szukam. A co do "/>" jak wspominałem robię to w Joomli a tam edytor mi sam pilnuje żeby było "/>" nawet jak usunę, więc to odpada. Zrobiłem kilka testów i działa tak jak powinno, innymi słowy śmierdzący leń zrobił sobie sam to co chciał bez łaski wielkiego nadętego "mistrza".
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #13





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(Armorek @ 2.11.2011, 17:20:58 ) *
ktoś nie potrzebuje twojej pomocy to się obudziłeś, nagle taki pomocny chcesz być

Pomaganie Tobie przestało mnie interesować.
Teraz trzeba zadbać o to, abyś nie zaraził innych forumowiczów złymi praktykami.

Twój kod to gwałt na standardach, ja tego nie nazwałbym programowaniem,
to raczej budowanie zamku z piasku albo bliżej - z gówna.

Wyrażeń regularnych używaj tylko jeśli wiesz co robisz, Ty tego nie wiesz co poniżej udowodnie.

częśc wyrażenia:
Kod
<img.*?src

dopasuje nie tylko "<img src" ale też na przykład "<imgJESTEM UPARTY JAK OSIOŁsrc"
Ze znacznikiem img bedzie to mialo niewiele wspolnego, mimo to zostanie dopasowane.
Jeszcze raz powtórze to co napisałem wyżej, Twój kod może i działa jednak któregoś dnia przestanie.

Tak to powinno wyglądać:
  1. $dom = new DOMDocument;
  2. @$dom->loadHTML($data);
  3.  
  4. $imgList = $dom->getElementsByTagName('img');
  5. foreach ( $imgList as $img ) {
  6. if ( 'dopasowywana_grafika' === $img->getAttribute('class')) {
  7. $src = img->getAttribute('src');
  8. list( $width, $height) = getimagesize($src);
  9. $div->setAttribute( 'style', "width:{$width};height:{$height}" );
  10. }
  11. }
  12.  
  13. $data = $dom->saveHTML($data);


Ten post edytował wNogachSpisz 2.11.2011, 18:39:57
Go to the top of the page
+Quote Post
Armorek
post
Post #14





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 1.11.2011

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


No tak to było tak strasznie trudne że wcześniej nie potrafiłeś tego napisać, ehhhhh, niepotrzebnie cały dzień straciłem. Ja uczę się na gotowcach.
tu moja wersja w funkcji
  1. function dopasowywana_grafika($tekst)
  2. {
  3. $dom = new DOMDocument;
  4. $tekst = mb_convert_encoding($tekst, 'HTML-ENTITIES', 'UTF-8');
  5. @$dom->loadHTML($tekst);
  6.  
  7. $imgList = $dom->getElementsByTagName('img');
  8. foreach ( $imgList as $img ) {
  9. if ( 'dopasowywana_grafika' === $img->getAttribute('class'))
  10. {
  11. $src = $img->getAttribute('src');
  12. $width = $img->getAttribute('width');
  13. if ( $width != '' ) $img->removeAttribute('width');
  14. $height = $img->getAttribute('height');
  15. if ( $height != '' ) $img->removeAttribute('height');
  16. if ($width == '' && $height == '') list( $width, $height) = getimagesize($src);
  17. $style = "width:100%; max-width:{$width}px; max-height:{$height}px; ";
  18. if ( $img->hasAttribute('style') ) $style .= $img->getAttribute('style');
  19. $img->setAttribute('style', $style);
  20. $img->removeAttribute('class');
  21. }
  22. }
  23. $tekst = $dom->saveHTML();
  24. return $tekst;
  25. }

postaram się to jeszcze rozwinąć jakoś pod moje potrzeby.
Cytat
dopasuje nie tylko "<img src" ale też na przykład "<imgJESTEM UPARTY JAK OSIOŁsrc"
wiem dla tego to dopisałem tak a nie inaczej żeby jakieś dodatkowe parametry nie sprawiły problemu przy dopasowaniu regexp.

No nic teraz to jest przynajmniej za co podziękować.

Ten post edytował Armorek 2.11.2011, 20:43:18
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: 15.09.2025 - 19:24