Pobieranie meta tagów, część 2
01 listopada 2008
Czas najwyższy zaprezentować bardziej rozbudowaną funkcję od tej, którą pokazałem we wpisie Jak najlepiej pobrać meta tagi jakiejś strony www?.
Wprowadzone zmiany:
- Z jednej funkcji zrobiły się dwie. Pierwsza odpowiada za prawidłowe odczytanie kodowania strony, druga pobiera resztę meta tagów.
- Przekonałem się jednak do wyrażeń regularnych a więc jest już tylko jedna wersja kodu, która działa zarówno na PHP 4 jak i PHP 5.
- Napisałem na nowo wyrażenia regularne. Teraz funkcje są bardziej odporne na błędy osób definiujących meta tagi. Nie przeszkadzają zbędne spacje, różna kolejność wartości, braki cudzysłowów, dodatkowe, niestandardowe wartości itd.
Kod PHP:
-
function pobierz_kodowanie($tresc) {
-
-
-
if($tresc) {
-
// pobieranie meta tagow typu http-equiv
-
preg_match_all('/<[\s]*meta[\s]+(http\-equiv|content)="?([^>"]+?)"?[\s]+(http\-equiv|content)="?([^>"]+?)"?[\s]*\/?[\s]*>/si', $tresc, $wynik, PREG_SET_ORDER);
-
-
foreach($wynik AS $key => $value) {
-
-
-
return $metatagi;
-
}
-
-
return $metatagi;
-
}
-
}
-
}
-
}
-
}
-
return FALSE;
-
}
-
-
-
if($tresc) {
-
// pobieranie zawartosci tagu <title>...</title>
-
-
if($title[1]) {
-
}
-
-
// wyciagamy reszte meta tagow
-
preg_match_all('/<[\s]*meta[\w\s="-]+?(name|content)="?([^>"]+)"?[\w\s="-]+?(content|name)="?([^>"]+)"?[\w\s="\/-]*>/si', $tresc, $wynik, PREG_SET_ORDER);
-
-
foreach($wynik AS $key => $value) {
-
-
}
-
else {
-
}
-
}
-
}
-
-
// rozbicie slow kluczowych na tablice
-
if($metatagi['keywords']) {
-
-
foreach($keywords AS $tag) {
-
if($tag) {
-
$tagi[] = $tag;
-
}
-
}
-
-
$metatagi['keywords'] = $tagi;
-
}
-
}
-
}
-
-
return $metatagi;
-
}
Funkcja pobierz_kodowanie() przyjmuje jedną wartość, ciąg znaków. Szuka w niej meta tagu odpowiedzialnego za definicję kodowania strony. Zwraca FALSE (jeżeli nic nie znajdzie) lub tablicę PHP o takiej strukturze:
-
Array
-
(
-
[charset] => UTF-8
-
[content-type] => text/html
-
)
Kodowanie jest zapisane zawsze wielkimi literami.
Funkcja pobierz_metatagi() przyjmuje string (źródło z którego ma wyciągnąć informację) oraz, opcjonalnie, tablicę PHP w której można przekazać inne meta tagi (chociażby te zwrócone przez funkcję pobierz_kodowanie()).
Sposób użycia (do pobrania źródła strony użyłem standardowo mojej funkcji otworz_adres() o której poczytasz tu: Funkcja pobierająca stronę www):
Wynik:
-
Array
-
(
-
[charset] => UTF-8
-
[content-type] => text/html
-
[title] => Mariusz Tarnaski
-
[generator] => WordPress 2.6
-
[description] => Blog na każdy temat chociaż chciałbym się skupiać przede wszystkim na mojej pasji jaką jest tworzenie stron Internetowych.
-
[keywords] => Array
-
(
-
[0] => Mariusz
-
[1] => Tarnaski
-
[2] => MariuszT
-
[3] => pozycjonowanie
-
[4] => tworzenie stron www
-
[5] => komputery
-
[6] => internet
-
)
-
-
[verify-v1] => D2ohrgDDepMDX6HH4qxpF3K3tHNuIkINWKWc+VDTqKM=
-
)
Za ewentualną zmianę kodowania odpowiada funkcja iconv() a więc musi ona być dostępna na serwerze (raczej już nie ma z tym problemów na większości serwerów). Zmiana kodowania jest przeprowadzana tylko wtedy gdy funkcja pobierz_kodowanie() znalazła jakieś informacje o kodowaniu (nie zwróciła FALSE) lub kodowanie jest inne niż to, które nas interesuje (w moim przypadku jest to UTF-8).
Dlaczego rozbiłem to na dwie funkcje? Bo mam dzięki temu większe możliwości. Teraz mogę przekodować całe źródło, pobrać meta tagi i przeprowadzać dalsze operacje na źródle już o odpowiednim kodowaniu.
Funkcje nie zwracają wartości meta tagów typu http-equiv, oczywiście poza meta tagiem definiującym kodowanie. Nie dodałem tej funkcjonalności bo do niczego mi to nie jest potrzebne.
Blog przede wszystkim o Internecie i mojej pasji jaką jest tworzenie stron www. Ale nie ograniczam się do jednej tematyki, piszę o wszystkim o czym mam ochotę :-)