BAZA WIEDZY
KURSY
Bazy danych w PHP
Kurs AdvancedAJAX
Kurs ASP
Kurs ASP.NET
Kurs C++
Kurs CSS
Kurs HTML
Kurs HTML drugi
Kurs JavaScript
Kurs MySQL
Kurs PHP
Kurs RSS
Kurs XHTML
Obiekty DOM
MANUALE
CSS1 - W3C
DOM - w budowie
PHP 2005
PHP 2006
Wyrażenia regularne
SHOUTBOX
STAT
Online: 13 | UU: 412
[PHP] Jak pobrać z ciągu znaków tylko wybraną ich część?
15 maj 2007

Wielokrotnie zachodzi potrzeba wydobycia z większego ciągu znaków tylko wybranej części. Takim ciągiem znaków może być np. kod html strony. Załóżmy, że ze strony takiej chcemy pobrać część kodu odpowiedzialną za wyświetlanie zdjęcia. Jak to zrobić? Spróbuję taki hipotetyczny przypadek przedstawić w poniższym przykładzie.

Przykład:

plik.html

Kod: html4strict

<html>
 <head>
 </head>
  <body>
    <p>Jakiś przykładowy tekst.</p>
    <img src="obrazek.jpg" width="100" height="100" alt="obrazek" />
    <p>Jakiś przykładowy tekst2.</p>

  </body>
</html>

plik.php

Kod: php

<?php
  $plik = fopen("plik.html","r");
  $pobrany_plik = fread($plik,500);
  fclose($plik);

 
  preg_match ("/<img(.*?)>/is", $pobrany_plik, $znalezione);
  echo $znalezione[0];
  //wyświetli: <img src="obrazek.jpg" width="100" height="100" alt="obrazek" />
  //czyli na ekranie powinien pojawić się obrazek

  echo $znalezione[1];
  //wyświetli: src="obrazek.jpg" width="100" height="100" alt="obrazek" /
?>

W pierwszej ramce mamy zawartość przykładowego pliku plik.html. Nie jest ona zbyt imponująca, ale ma służyć jako przykład (mogłaby być o wiele większa). Skupmy się jednak na zawartości pliku plik.php z drugiej ramki, tam bowiem odbywa się cała operacja. W pierwszej kolejności do zmiennej $plik przypisywana jest funkcja fopen(), która otwiera plik.html z atrybutem r, czyli tylko do odczytu. Następnie do zmiennej $pobrany_plik poleceniem fread() "ładowana" jest właściwa zawartość całego pliku. Argument 500 w poleceniu fread() określa limit pobranych znaków. Polecenie fclose() zamyka plik.

W dalszej części zastosowana zostaje funkcja preg_match(). Jako argumentów używa wyrażeń regularnych, którymi określić można wzór wg którego wyselekcjonować można z ciągu znaków tylko ich część. Pierwszy argument funkcji preg_match() określa w naszym przykładzie, że interesujący nas ciąg znajdować ma się pomiędzy: <img a znakiem > . Zapis (.*?) określa, że chcemy wyselekcjonować dowolne znaki bez żadnych ograniczeń.

Drugi argument to cały string, z którego ma być dokonywana slekcja, czyli w naszym przypadku kod html z pliku plik.html zapisany w zmiennej $pobrany_plik.

Trzeci argument to zmienna, a raczej tablica, do której zapisywane są wyniki. Dlaczego tablica? Otóż dlatego, że do zmiennej tej zapisywane są wyniki na dwa sposoby. Do tablicy o zerowym indeksie zapisywany jest wynik łącznie z elementami, które podane były jako początek i koniec, natomiast do tablicy z indeksem 1 zapisywany jest wynik bez tych elementów.

Dwa rodzaje wyników wywołane są w przykładzie poleceniem echo $znalezione[0] i echo $znalezione[1].

Funkcją preg_match() przy zastosowaniu odpowiednich wyrażeń regularnych można "wybierać" dowolną treść. Zapraszam do przeczytania kursu o wyrażeniach regularnych.

Autor: Adam Suchowski

Dodaj komentarz









Komentarze
3 odpowiedzi
adamt
9 kwiecień 2008, godz. 7:39

zamiast otwierać plik przypisz tekst ze znacznikami od razu do zmiennej i wtedy sprawdź

delta_57
8 kwiecień 2008, godz. 4:13

Niestety nie działa mi na localhost.

kgb
14 lipiec 2007, godz. 8:00

witam
wszystko jest ok jak pobrać tabele z danymi ze strony

 
 
Copyright © 2006-2011 egrafik.pl | Kontakt | Reklama | Projekty domów
jocker