Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Jak wstawić fragment z <title /> do zmiennej?
Forum PHP.pl > Forum > Przedszkole
adam1226
Mam problem, gdyz moja wiedza o php jest kompletnie szczatkowa, probowalem cos naskrobac samemu, ale bez rezulatow.
Szukam sposobu na to aby wstawic fragment frazy spomiedzy znacznikow HTML <title>a </tile> do zmiennej.

Chce zrobic skrypt ktory wrzucalby na strone elementy w zaleznosci od tego czy w title wystapil pewien okreslony ciag znakow czy tez nie.

MAm przygotowane strony z komenda require_once i odpowiadajace jej pliki w ktorych chcialbym wrzucac kod.

qba10
Ale title będzie zależne od ciebie, czy title jakieś innej strony?

Jeżeli sam decydujesz jakie title to:
  1. $title = "Tytul Strony1";
  2. echo" <html>
  3. <head>
  4. <title>".$title."</title>
  5. </head>
  6. <body>
  7. ";
  8. If($title == "Tytul Strony1"){
  9. echo "<p> cos tam</p>";
  10. }elseif($title =="Tytul Strony2"){
  11. echo "<p> cos tam innego</p>";
  12. }
  13. echo "</body>
  14. </html>";


Jeżeli chcesz pobrać title innej strony to wyrażenia regularne....
adam1226
title juz jest okreslone na podstronach

generalnie to chodzilo mi o cos troszke innego;
chyba rzeczywiscie bede musial skorzystac z wyrazen reguralnych (jak do tego podejsc?)
ale chce zebym mogl sobie okreslic kilka zmiennych np:

'jabłko', 'pomidor', 'march' i zrobic taka instrukcje, ze:

jesli title na stronie to : <title> jabłko </title>, <title>złote jabłko </title>albo <title>sok jabłkowy</title> to wyswietla sie element 1.


jesli jest np. <title>świeże pomidory</title>, <title>sok pomidorowy </title>to wyswietla sie element 2
jesli to<title> pomaranczowa marchew</title>, <title>sok marchwiowy</title>, <title>nać marchwi</title> to wyswietla sie element 3

a jesli nie ma zadnego z tych wyrazow (fragmentow wyrazow/ciagow znakow) to nie wyswietla sie nic.


Ewentualnie nie musi to byc koniecznie pobierane z title, tyle, ze w takim przypadku musialbym okreslic, ze porzadany element pojawia sie dopiero jesli dany ciag znakow pojawi sie wiecej niz 1raz.
altruista2
Wygląda mi to na ciężką sprawę......
[quote]jesli w title na stronie jest : jabłko, złote jabłko albo sok jabłkowy to wyswietla sie element 1.
jesli jest to np. świeże pomidory, sok pomidorowy to wyswietla sie element 2
jesli to pomaranczowa marchew, sok marchwiowy, nać marchwi to wyswietla sie element 3/[quote]
.....bo nic z tego nie rozumiem smile.gif
adam1226
teraz rozjasnilo, edytowalem posta? tongue.gif
cniak
Kod
if(!isset($_GET['id'])){
        echo'strona główna';
    }
        if($_GET['id']=="costam1"){
        echo'odpowiednik costam1';
    }
        if($_GET['id']=="costam2"){
        echo'odpowiednik costam2';
    }


Mozesz tez dla kilku warunkow

Kod
            if($_GET['id']=="costam4" || $_GET['id']=="costam5" || $_GET['id']=="costam6" || $_GET['id']=="costam7"){
        echo'odpowiednik costam4 costam5 costam6 costam7';
    }


Wszystko umiesc pomiedzy <title></title> i oczywiscie pomiedzy kodem php (<? ?>)
qba10
Na początku musisz zapisać title do zmiennej.

a potem za pomocą funkcji strops:
  1. $title = "Sok pomidorowy";
  2. if(strpos($title, "pomidor") !== false)
  3. {
  4. echo "To co chcesz wyswietlic z pomidorem"; // wyswietli sie to!!!
  5. }
  6.  
  7. elseif(strpos($title, "marchewka") !== false)
  8. {
  9. echo "To co chcesz wyswietlic z marchewka";
  10. }
  11.  



Edit:

To skrypcik który znajduję przynajmniej 2 wystąpienia ciągu znaków w tekście.
jeżeli będą na przykład dwa wystąpienia "pomidor" to tekst się wyświetli:

  1. $title = "Sok pomidorowy z pomidorami";
  2. $int["pomidor"] = strpos($title, "pomidor");
  3. $int2["pomidor"] = strrpos($title, "pomidor");
  4. $int["marchew"] = strpos($title, "marchew");
  5. $int2["marchew"] = strrpos($title, "marchew");
  6. if($int["pomidor"] != $int2["pomidor"])
  7. {
  8. echo "pomidory"; // wyswietli sie to!!!
  9. }
  10.  
  11. elseif($int["marchew"] != $int2["marchew"])
  12. {
  13. echo "To co chcesz wyswietlic z marchewka";
  14. }
adam1226
Niestety, jak narazie zaden ze sposobow nie dziala,
Poza tym przede wszystkim title musi byc jakos pozyskiwane automatycznie spomiedzy znacznikow, gdyz trudno bedzie mi przerobic kod ponad 1000 podstron :/
qba10
Uzyje gotowej funkcji znalezionej w necie do pobierania strony
(http://www.tarnaski.eu/blog/funkcja-pobierajaca-strone-www/):
  1. function otworz_adres($adres, $post=false, $blad=3)
  2. {
  3. $header[]='Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5';
  4. $header[]='Accept-Language: pl,en-us;q=0.7,en;q=0.3';
  5. $header[]='Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7';
  6. $header[]='Keep-Alive: 300';
  7. $header[]='Connection: keep-alive';
  8.  
  9. $ch=curl_init();
  10. curl_setopt($ch, CURLOPT_URL, $adres);
  11. curl_setopt($ch, CURLOPT_HEADER, 0);
  12. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  13. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  14. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  15. curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
  16. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11');
  17. curl_setopt($ch, CURLOPT_TIMEOUT, 60);
  18. curl_setopt($ch, CURLOPT_AUTOREFERER, true);
  19. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  20. curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
  21.  
  22. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
  23. if($post!==false)
  24. {
  25. curl_setopt($ch, CURLOPT_POST, true);
  26. curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  27. }
  28. $zwroc=curl_exec($ch);
  29.  
  30. if($blad>0)
  31. {
  32. $naglowek=substr(curl_getinfo($ch, CURLINFO_HTTP_CODE), 0, 1);
  33. if($zwroc=='' OR curl_error($ch)!='' OR $naglowek=='4' OR $naglowek=='5')
  34. {
  35. curl_close($ch);
  36. sleep(1);
  37. return otworz_adres($adres, $post, --$blad);
  38. }
  39. }
  40. else
  41. return false;
  42.  
  43. curl_close($ch);
  44. return gzdecode($zwroc);
  45. }
  46.  
  47. function gzdecode($tresc)
  48. {
  49. if(strlen($tresc)<18 OR strcmp(substr($tresc,0,2),"\x1f\x8b"))
  50. return $tresc;
  51. return gzinflate(substr($tresc, 10));
  52. }

Funckja pobierajaca title;
  1. function pobierz_title($tresc){
  2. preg_match('/<title>([^>]*)<\/title>/si', $tresc, $title);
  3.  
  4. if($title[1]) {
  5. return $title[1];
  6. }
  7. }

  1.  
  2.  
  3.  
  4. $title = pobierz_title(otworz_adres(('http://wp.pl');// link do tej podstronki
  5.  
  6.  
  7.  
  8. // Tutaj te zależności musisz sobie sam po podawać wg tego przykładu co masz poniżej...
  9. if(strpos($title, "pomidor") !== false)
  10. {
  11. echo "To co chcesz wyswietlic z pomidorem"; // wyswietli sie to!!!
  12. }
  13. elseif(strpos($title, "marchewka") !== false)
  14. {
  15. echo "To co chcesz wyswietlic z marchewka";
  16. }

Tu masz ten przykład dla title. Skrypt sprawdza czy w pobranym title znajduję się wyraz "pomidor" i "marchewka". Skrypt je wykryje nawet jeżeli będą łączone z innymi wyrazami (np: tak jak podałeś "pomidorówka")

Edit:

Nie moge edytować postu wyżej, wiec musisz zamknąc jeden nawias:
  1. $title = pobierz_title(otworz_adres(('http://wp.pl'));// link do tej podstronki
adam1226
hmmm tylko ja ten skrypt chcialbym includowac (mam wbudowane akurat require_once)

tak zeby w zaleznosci od wlaczonej strony wyswietlal porzadany element, wiec okreslanie konkrentje podstrony niestety tutaj nie pasuje...


sorry jednak udalo mi sie poprawic, za to:
Undefined offset: 1
w linijce:L
if($title[1]) {
(ale to moze ja cos zle wstawiam)
w kazdym razie jeszcze trzeba pokombinowac
qba10
Mi ten skrypt działa:
  1. $tresc = "<title>Qba</title>";
  2.  
  3.  
  4. function pobierz_title($tresc){
  5.  
  6. preg_match('/<title>([^>]*)<\/title>/si', $tresc, $title);
  7.  
  8.  
  9.  
  10. if($title[1]) {
  11.  
  12. return $title[1];
  13.  
  14. }
  15.  
  16. }
  17.  
  18.  
  19.  
  20.  
  21. echo pobierz_title($tresc);


Zobacz czy $tresc nie jest pusta....

Edit:

Zamiast skryptów powyżej użyj:
  1. function pobierz_title($tresc){
  2.  
  3. preg_match('/<title>([^>]*)<\/title>/si', $tresc, $title);
  4.  
  5.  
  6.  
  7. if($title[1]) {
  8.  
  9. return $title[1];
  10.  
  11. }
  12.  
  13. }
  14.  
  15.  
  16. $www = file_get_contents ("http://forum.php.pl"); //twoje podstrony
  17.  
  18. $title = pobierz_title($www);
  19.  
  20.  
  21. if(strpos($title, "pomidor") !== false)
  22.  
  23. {
  24.  
  25. echo "To co chcesz wyswietlic z pomidorem";
  26.  
  27. }
  28.  
  29. elseif(strpos($title, "marchewka") !== false)
  30.  
  31. {
  32.  
  33. echo "To co chcesz wyswietlic z marchewka";
  34.  
  35. }


Skrypt działa na 100%, sprawdzone
adam1226
tak dziala, tylko ta kwestia, zeby pobieralo title nie z okreslonej, ale aktualnie otwartej podstrony?
qba10
To najwyraźniej coś ty źle robisz, bo skrypt działa poprawnie.
Może na tej stronie co pobierasz masz takie samo title co na tej co wyświetlasz...
Bez kodu nie powiem ci co masz źle bo wróżką niestety nie jestem.

U mnie taki przykładowy kod działa
  1. <htmL>
  2. <head>
  3. <title>Tytul strony</title>
  4. </head>
  5. <body>";
  6. function pobierz_title($tresc){
  7.  
  8. preg_match('/<title>([^>]*)<\/title>/si', $tresc, $title);
  9.  
  10.  
  11.  
  12. if($title[1]) {
  13.  
  14. return $title[1];
  15.  
  16. }
  17.  
  18. }
  19.  
  20.  
  21. $www = file_get_contents ("http://forum.php.pl"); //twoje podstrony
  22.  
  23. $title = pobierz_title($www);
  24. echo $title;
  25. echo "</body>
  26. </html>";

A kod wygenerowanej strony to
  1. <title>Tytul strony</title>
  2. </head>
  3. <body>Forum PHP.pl (Powered by Invision Power Board)</body>
  4. </html>


Więc jest wszytko ok i pobiera title pobranej strony....
adam1226
tak, ten kod jest ok,
chodzilo mi jednak o cos takiego, zeby powiedzmy badal to title dla:
podstrona1.php ; podstrona2.php podstrona3.php...

a tutaj musze okreslic o jaka podstronemi chodzi
qba10
To otwieraj te pliki za pomocą funkcji jak sie nie myle file ( wiecej info na googl)
adam1226
Dobra, powiedzmy, ze ten skrypt dziala i wielki dziekie, za pomoc, bo w sumie praktycznie w 100% rozwiazuje podany przeze mnie w tytule watku problem, a z tym wczytaniem z aktualnie otwartego pliku to widze, ze moze byc wiekszy problem, wiec zapytac sie jeszcze w jednym temacie

jeszcze sie tylko chcialem dopytac, ale to juz nie jest takie pilne, czy daloby sie zrobic, zeby ignorowalo pierwsze wystapienie mojego slowa(ciagu) "kluczowego" ? bo mam tytuly postaci:
marchew, jabłko, pomidor - sok pomidorowy
marchew, jabłko, pomidor - sok marchwiowy
marchew, jabłko, pomidor - marchewka z groszkiem




nie chcialbym bynajmniej zabierac waszego cennego czasu, niemniej jednak, gdyby ktos mial ochote to mam jeszcze 2 pytania:

1. czy duzo byloby do przerobienie, zeby sprawdzalo jednak w tresci, bo jesli dobrze rozumiem, to i tak skrypt musi przeanalizowac cala tresc?

i. w takim wypadku jak zrobic zeby warunkiem wykonania instrukcji bylo conajmniej 2 krotne wystapienie danego slowa?

Czy dobrze mysle, zeby tu sprobowac z preg_match_all ?

2. Co zrobic, zeby nie zwracal uwagi na wielkosc liter przy sprawdzaniu?
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.