Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Jak wstawić fragment z <title /> do zmiennej?
adam1226
post 14.02.2010, 15:01:16
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 14.02.2010

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


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.

Go to the top of the page
+Quote Post
qba10
post 14.02.2010, 15:09:18
Post #2





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


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....


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
adam1226
post 14.02.2010, 15:14:32
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 14.02.2010

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


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.

Ten post edytował adam1226 14.02.2010, 15:36:53
Go to the top of the page
+Quote Post
altruista2
post 14.02.2010, 15:30:25
Post #4





Grupa: Zarejestrowani
Postów: 127
Pomógł: 32
Dołączył: 8.02.2010

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


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


--------------------
Jeśli Ci pomogłem kliknij pomógł. W ten sposób temat zaświeci się na żółto i użytkownicy którzy pomagają nie będą musieli niepotrzebnie klikać. Dziękuję.

"Pomaganie"
Go to the top of the page
+Quote Post
adam1226
post 14.02.2010, 15:37:19
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 14.02.2010

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


teraz rozjasnilo, edytowalem posta? tongue.gif
Go to the top of the page
+Quote Post
cniak
post 14.02.2010, 15:56:26
Post #6





Grupa: Zarejestrowani
Postów: 169
Pomógł: 12
Dołączył: 16.09.2009

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


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 (<? ?>)

Ten post edytował cniak 14.02.2010, 16:15:59
Go to the top of the page
+Quote Post
qba10
post 14.02.2010, 16:08:28
Post #7





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


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. }


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
adam1226
post 14.02.2010, 18:13:18
Post #8





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 14.02.2010

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


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 :/
Go to the top of the page
+Quote Post
qba10
post 14.02.2010, 19:02:58
Post #9





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


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


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
adam1226
post 14.02.2010, 20:24:35
Post #10





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 14.02.2010

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


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

Ten post edytował adam1226 14.02.2010, 20:32:28
Go to the top of the page
+Quote Post
qba10
post 14.02.2010, 21:22:15
Post #11





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


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


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
adam1226
post 14.02.2010, 21:50:01
Post #12





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 14.02.2010

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


tak dziala, tylko ta kwestia, zeby pobieralo title nie z okreslonej, ale aktualnie otwartej podstrony?
Go to the top of the page
+Quote Post
qba10
post 14.02.2010, 23:02:53
Post #13





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


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....


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
adam1226
post 15.02.2010, 01:36:02
Post #14





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 14.02.2010

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


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
Go to the top of the page
+Quote Post
qba10
post 15.02.2010, 08:38:43
Post #15





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


To otwieraj te pliki za pomocą funkcji jak sie nie myle file ( wiecej info na googl)


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
adam1226
post 16.02.2010, 20:26:43
Post #16





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 14.02.2010

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


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?

Ten post edytował adam1226 16.02.2010, 20:37:48
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.07.2025 - 17:04