Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Wyszukanie i zaawansowana zamiana w ciągu znaków
Forum PHP.pl > Forum > Przedszkole
Armorek
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 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.
wNogachSpisz
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
Armorek
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.
wNogachSpisz
Pytaj.
Armorek
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. 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.
by_ikar
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.
wNogachSpisz
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. 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.
Armorek
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 happy.gif

by_ikar niestety nie znam, jeszcze poszukam.
wNogachSpisz
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.
Armorek
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. 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.
wNogachSpisz
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 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.
Armorek
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".
wNogachSpisz
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);
Armorek
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ć.
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.