Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pobranie danych tekstowych ze strony html i przypisanie do zmiennych w php
Forum PHP.pl > Forum > Przedszkole
preg
Zatrzymałem się na problemie:

mam na stronie istniejący kod html w szablonie:

<p>
<fragment kodu 1a> nazwadomeny1.pl <fragment kodu 1b>
<fragment kodu 2a> nazwadomeny2.pl <fragment kodu 2b>
<fragment kodu 3a> nazwadomeny3.pl <fragment kodu 3b>
.
.
.
<fragment kodu 20a> nazwadomeny20.pl <fragment kodu 20b>
</p>

Czy jest prosty sposób na zczytanie pomiędzy znacznikami <p> a </p> nazwadomeny1.pl do nazwadomeny20.pl by były dostępne w zmiennych od 1 do 20 i mogły wpływać na zmiany kodu <fragment kodu 1a> ...<fragment kodu 20a>

nazwadomeny1.pl ... nazwadomeny20.pl jest formacie bez http://www. (tylko nazwadomeny.pl)



Adi32
Oczywiście, że jest prosty sposób.

Wczytujesz zdalny plik np za pomocą

  1. $strona = file_get_contents('http://zdalny.plik.pl/index.php');


Masz w ten sposób stronę w zmiennej $strona.

Teraz możesz użyć wyrażeń regularnych lub JS.

Wyrażenie:

  1. preg_match_all('/tu wyrażenie/',$strona,$wyj);


JS:

var strona = "<?=$strona?>";

var elementy.html($(strona).find(/* co tam chcesz znaleźć lub nawet wyrażenie regularne */));
preg
Cytat(Adi32 @ 4.07.2011, 10:16:21 ) *
Wczytujesz zdalny plik np za pomocą

  1. $strona = file_get_contents('http://zdalny.plik.pl/index.php');


Masz w ten sposób stronę w zmiennej $strona.

Teraz możesz użyć wyrażeń regularnych lub JS.


Podałeś chyba bardziej uniwersalny sposób niż chciałem smile.gif Bo umożliwia wczytanie całej i dowolnej strony z sieci.

Chodzi mi nawet o prostszy wariant - wczytanie z własnej, edytowanej strony - podstron z takim szablonem ma być dużo, więc chciałbym się ograniczyć do wczytania tylko fragmentu pomiędzy znacznikami <p> </p>
Cel jest taki, by tekst zamienić na inny adres ze składnikami wczytanego tekstu "jakasdomena.pl"
by_ikar
Jeżeli kiedykolwiek bawiłeś się jQuery i spodobało ci się, to phpQuery również przypadnie ci do gustu. manipulacia DOM jest na prawdę prosta i to co chcesz osiągnąć, można zrobić w kilku linijkach kodu.
preg
Cytat(by_ikar @ 4.07.2011, 10:36:23 ) *
Jeżeli kiedykolwiek bawiłeś się jQuery i spodobało ci się, to phpQuery również przypadnie ci do gustu. manipulacia DOM jest na prawdę prosta i to co chcesz osiągnąć, można zrobić w kilku linijkach kodu.


Dopiero zaczynam zabawę z php - z konieczności, dotychczas tylko html, myślę że nawet jestem w "młodszakach" w tym przedszkolu smile.gif

Także proszę o wyrozumiałość i niestety podpowiedzi z gotowcami lub jak dla laika.
Także dla mnie to sugestia na przyszłość, dzięki za podpowiedź.
Adi32
Cytat(preg @ 4.07.2011, 11:05:48 ) *
Dopiero zaczynam zabawę z php - z konieczności, dotychczas tylko html, myślę że nawet jesetm w "młodszakach" w tym przedszkolu smile.gif

Także proszę o wyrozumiałość i niestety podpowiedzi z gotowcami lub jak dla laika.


Zacznij zabawę z manualem. Zanim zaczniesz płynnie pisać takie rzeczy musisz też na poważnie zabawić się z wyrażeniami regularnymi:

http://gajdaw.pl/php/wyrazenia-regularne-pcre-php-tutorial/

Przeleć 7 razy cały tutorial a zapewniem będziesz wiedział więcej. (co do samych wyrażeń regularnych)

Gotowce tylko Ci zaszkodzą. Kiedy ja zaczynałem zabawę z PHP stosowałem się właśnie do tych zasad.

preg
Cytat(Adi32 @ 4.07.2011, 11:09:41 ) *
Zacznij zabawę z manualem. Zanim zaczniesz płynnie pisać takie rzeczy musisz też na poważnie zabawić się z wyrażeniami regularnymi:

http://gajdaw.pl/php/wyrazenia-regularne-pcre-php-tutorial/


Przeglądałem, nawet zamówiłem dziś książkę Gajdy smile.gif
Kombinowałem przez weekend z tego co z samouczków na necie, ale za dużo tego na raz jak dla mnie.

Spróbuję z Twoją wersją wczytania pliku, dzięki
by_ikar
No jak początkujący jesteś, ale kupiłeś już książkę, to mogę dać ci jakiegoś gotowca, tylko pokaż mi większą część kodu który chcesz pobrać (html), żebym wiedział co dokładnie chcesz pobrać, bo niestety nie ma jakiejś metody że mówisz stronie "pobierz mi to o czym teraz myślę" i ona za ciebie pobiera to o czym myślisz biggrin.gif trzeba podać dokładnie co ma pobrać, jak będę wiedział co ma pobrać, to ci napiszę gotowca.
preg
Cytat(by_ikar @ 4.07.2011, 11:34:18 ) *
No jak początkujący jesteś, ale kupiłeś już książkę, to mogę dać ci jakiegoś gotowca, tylko pokaż mi większą część kodu który chcesz pobrać (html), żebym wiedział co dokładnie chcesz pobrać, bo niestety nie ma jakiejś metody że mówisz stronie "pobierz mi to o czym teraz myślę" i ona za ciebie pobiera to o czym myślisz biggrin.gif trzeba podać dokładnie co ma pobrać, jak będę wiedział co ma pobrać, to ci napiszę gotowca.


Dziękuję za deklarację, nawet nie chcę Cię męczyć o gotowy kod - wystarczą składniki z którymi sobie już dalej poradzę.

Na stronie mam taki fragment - istniejący kod html (podaję szablon):

Kod
<br>
adres1.pl<br>
adres2.pl<br>
adres3.pl<br>
adres4.pl<br>
.
.
.
adres20.pl<br>



Chcę by skrypt php w tym samym miejscu co mam ten fragment, zmodyfikował mi każdą z 20 linijek htmla na postać:


Kod
<a href="http://www.stałyadres.pl/podkatalog/adres1.pl" target="_blank" class="nazwaclasy">adres1.pl</a><br>
<a href="http://www.stałyadres.pl/podkatalog/adres2.pl" target="_blank" class="nazwaclasy">adres2.pl</a><br>
<a href="http://www.stałyadres.pl/podkatalog/adres3.pl" target="_blank" class="nazwaclasy">adres3.pl</a><br>
<a href="http://www.stałyadres.pl/podkatalog/adres4.pl" target="_blank" class="nazwaclasy">adres4.pl</a><br>
.
.
.
<a href="http://www.stałyadres.pl/podkatalog/adres20.pl" target="_blank" class="nazwaclasy">adres20.pl</a><br>



Zakładam więc, że potrzebuję mieć coś takiego (dla wersji docelowej):

1/ kod, który mi wyłapuje adres1.pl do adres20.pl z górnego fragmentu, przypisuje to do kolejnych 20 zmiennych (tego nie wiem jak zrobić)


2/ przed fragmentami kodu adres1.pl do adres20.pl umieszczem np. "print $zmienna1" w której mam
zdefiniowany fragment kodu html:

Kod
"<a href="http://www.stałyadres.pl/podkatalog/" (tutaj wstawiam zmienną od adres1.pl)

dodaję zdefiniowany kolejny kawałek html:

Kod
" target="_blank" class="nazwaclasy"> (tu wstawiam znowu zmienną od adres1.pl)


3/ wstawiam funkcję print $zmienna2 w której mam zdefiniowane: "</a>"

I to już koniec (dalej to samo dla kolejnych adres2.pl ... adres20.pl

Czyli uzyskuję

z tego:
Kod
adres1.pl<br>


to:

Kod
<a href="http://www.stałyadres.pl/podkatalog/adres1.pl" target="_blank" class="nazwaclasy">adres1.pl</a><br>



Zacząłem tak:

Kod
<?
$url_ref = 'http://www.stalyadres.pl/podkatalog/';
$html1 = '<a href="';
$html2 = 'adres1.pl" target = "blank">adres1</a><br>'; (zamiast adres1.pl powinna być zmienna zawierająca adres1.pl)

print ($html1 . $url_ref . $html2);
?>


Ale ten kod nie wczytuje tego co już jest (adres1.pl do adres20.pl) i nie dodaje modyfikuje kodu html już istniejącego.

by_ikar
Musisz mi jeszcze kilka rzeczy wytłumaczyć bo mam wątpliwości do tego co mi przychodzi do głowy. Otóż, czy ty te adresy które chcesz opakować w <a> pobierasz skądś, czy ty tą listę znasz? Bo ja to rozumiem tak, że masz stronę jest to strona "preg.com", jest również inna strona i nazywa się ona "some.com". Na swojej stronie masz paragraf <p> i w nim chcesz umieścić linki które pobierasz z strony some.com na której te linki są umieszczone w takiej postaci:

Kod
<br>
adres1.pl<br>
adres2.pl<br>
adres3.pl<br>
adres4.pl<br>
.
.
.
adres20.pl<br>


Zgadza się? Bo nie wiem czy dobrze rozumuje smile.gif
preg
Cytat(by_ikar @ 4.07.2011, 15:41:42 ) *
Musisz mi jeszcze kilka rzeczy wytłumaczyć bo mam wątpliwości do tego co mi przychodzi do głowy. Otóż, czy ty te adresy które chcesz opakować w <a> pobierasz skądś, czy ty tą listę znasz? Bo ja to rozumiem tak, że masz stronę jest to strona "preg.com", jest również inna strona i nazywa się ona "some.com". Na swojej stronie masz paragraf <p> i w nim chcesz umieścić linki które pobierasz z strony some.com na której te linki są umieszczone w takiej postaci:

Kod
<br>
adres1.pl<br>
adres2.pl<br>
adres3.pl<br>
adres4.pl<br>
.
.
.
adres20.pl<br>


Zgadza się? Bo nie wiem czy dobrze rozumuje smile.gif


Jest jeszcze prościej - mam starą i prymitywną wersję strony w html-u z dużą ilością podstron, na każdej z tych podstron jest właśnie takie coś:

Kod
<br>
adres1.pl<br>
adres2.pl<br>
adres3.pl<br>
adres4.pl<br>
.
.
.
adres20.pl<br>


Chcę najprostszym sposobem zrobić z tego działające linki wg szablonu jaki wcześniej opisałem (część stała jakiegoś adresu + wklejone w 2 miejscach linijki tekstu z adresami).
Ponieważ za dużo czasu (i jeszcze nie na moim etapie) była by gruntowna przebudowa z bazą Mysql (pewnie było by najlepiej i najprościej) chciałem szybkim sposobem połatać stronę, robiąc działające linki w miejsce samego tekstu z adresami.

Cały proces wyglądał by wg mnie tak.:

- wczytuję starą stronę do edytora,
- w miejscu z tekstem adresów dodaję (na czerwono nowe rzeczy):

<br>
<kawałek kodu php 1a>adres1.pl<kawałek kodu php 1b><br>
<kawałek kodu php 2a>adres2.pl<kawałek kodu php 2b><br>
<kawałek kodu php 3a>adres3.pl<kawałek kodu php 3b><br>
<kawałek kodu php 4a>adres4.pl<kawałek kodu php 4b><br>
.
.
.
<kawałek kodu php 20a>adres20.pl<kawałek kodu php 20b><br>


lub jak się da prościej:

wycinam tekst z adresami i wstawiam do skryptu php, a wyświetlanie wyniku wstawiam w miejsce wyciętego tekstu z adresami (wariant dużo lepszy bo nie muszę setki razy wstawiać przed adres i za adres nowego kodu php.

Podstron jest kilkadziesiąt, na każdej z nich są po 2 takie bloki po 20 adresów (sam tekst bez kodu robiącego linki).
by_ikar
Wczoraj już nie wiedziałem jak do końca będą wyglądać te linki, dlatego użyłem wyrażenia regularnego, które znajdzie ci wszystkie linki w zmiennej której mu podasz.

Kod
<?php


$str = '<br>
adres1.pl<br>
adres2.pl<br>
adres3.pl<br>
adres4.pl<br>
adres5.pl<br>
adres6.pl<br>
adres7.pl<br>
adres8.pl<br>
adres9.pl<br>
adres10.pl<br>
adres11.pl<br>
adres12.pl<br>
adres13.pl<br>
adres14.pl<br>
adres15.pl<br>
adres16.pl<br>
adres17.pl<br>
adres18.pl<br>
adres19.pl<br>
adres20.pl<br>';


preg_match_all('#(((f|ht){1}tp(s)?://)?[\w-]{1,}\.[a-z]{2,}([\w@:%+.~?&=\/]+)?)#x', $str, $matches);

foreach($matches[0] as $adres)
{
    echo '<a href="http://www.stałyadres.pl/podkatalog/'.$adres.'" target="_blank" class="nazwaclasy">'.$adres.'</a><br>'.PHP_EOL;
}


Zamiast zmiennej $str którą podałem w powyższy sposób możesz przypisać do niej zawartość pliku:

Kod
$str = '';

if(file_exists(''))
{
    $str = file_get_contents('/path/to/file/filename.html');
}

preg_match_all('#(((f|ht){1}tp(s)?://)?[\w-]{1,}\.[a-z]{2,}([\w@:%+.~?&=\/]+)?)#x', $str, $matches);

foreach($matches[0] as $adres)
{
    echo '<a href="http://www.stałyadres.pl/podkatalog/'.$adres.'" target="_blank" class="nazwaclasy">'.$adres.'</a><br>'.PHP_EOL;
}


Bo niestety nadal nie do końca rozumiem o co dokładnie ci chodzi.. Nie wiem czy te adresy masz gdzieś w pliku, czy masz gdzieś je w zmiennej, czy jak to wygląda, ciężko mi powiedzieć. Najlepiej jak się daje kod php wtedy jest łatwiej zrozumieć o co chodzi z danym problemem.

Gdyby nie chodziło o to, to musisz mi wyjaśnić chyba jeszcze prościej o co ci chodzi, albo podać chociaż część pliku php, bo niestety z fusów ciężko się wróży wink.gif


PS. z wyrażeniami zacząłem dopiero ostatnio zabawę, więc może ono nie być najlepsze, nie mniej, sprawdzałem na kilku wariantach i powinno działać.

Pozdro.
preg
Cytat(by_ikar @ 5.07.2011, 09:03:37 ) *
Nie wiem czy te adresy masz gdzieś w pliku, czy masz gdzieś je w zmiennej


Adresy mam w pliku HTML-a, w tym samym pliku będę robił modyfikację, którą mi podałeś.

Sprawdziłem na rzeczywistych adresach, wszystko ok, ale nie chodzą adresy z myślnikiem w środku (obcina element przed myślnikiem) - pewnie to kwestia definicji myślnika ?

Przetestuje dziś na dalszych stronach.

Pozdro i dzięki serdeczne, dam znać jak testy.
by_ikar
Tak, dokładnie, kwestia dodania myślnika, o którym zapomniałem wink.gif zaktualizowałem posta wyżej, gdybyś nie odnalazł różnicy to podmień samo wyrażenie.

z:

Kod
#(((f|ht){1}tp(s)?://)?[\w]{1,}\.[a-z]{2,}([\w@:%+.~?&=\/]+)?)#x


na:

Kod
#(((f|ht){1}tp(s)?://)?[\w-]{1,}\.[a-z]{2,}([\w@:%+.~?&=\/]+)?)#x


Oczywiście to wyrażenie nie jest idealne, ale z tego co i się wydaje powinno całkiem przyzwoicie łapać wszystkie adresy. Gdybyś chciał żeby łapał tylko adres w postaci example.com a nie w postaci http://www.example.com/some/param.php?get=var przykładowo, to wykasuj jedną rzecz z wyrażenia, a dokładnie to ono musiało by tak wyglądać:

Kod
#([\w-]{1,}\.[a-z]{2,})#x


Które również powinno zadziałać na linki które podałeś wcześniej.

Pozdro i nie ma sprawy wink.gif
preg
Wielkie dzięki.

Pozdro smile.gif


(przy okazji stawiam piwo wink.gif )


Testy, testy i chyba duża nie przewidziana "górka"

Bo co prawda adresy z polskimi znakami IDN nie występują często, ale skrypt ich nie widzi.
A tu jeszcze znaki mogą być w kodzie iso-8859-2 lub windows-1250

Reszta chodzi super, jak ktoś ma doświadczenie jak wpisać do rozpoznawania jeszcze polskie znaki diakrytyczne to HELP smile.gif
by_ikar
Kod
#([\w-ąśżźćńłóę]{1,}\.[a-z]{2,})#x


A tutaj: http://regexr.com?2u61b masz podgląd działania. Nie będzie działać w przypadku kiedy w adresach będą duże litery z znakami diakrytycznymi. wink.gif
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.