![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Mam kod:
Dopóki nie dodam ostatniej linijki, błędu nie ma. Jeśli tylko dowiem się w czym leży problem, od razu będę mógł iść dalej z tematem. phhpinfo() mówi: DOM/XML enabled DOM/XML API Version 20031129 libxml Version 2.6.26 HTML Support enabled XPath Support enabled XPointer Support enabled Schema Support enabled RelaxNG Support enabled |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Dopóki nie dodam ostatniej linijki, błędu nie ma. Masz na mysli to:echo $doc; ? Mówisz że dostajesz błąd.... super... a może byś raczył się tym błędem z nami podzielić, czy może oczekujesz wróżenia z fusów? |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
kompletnie wypadło mi z głowy, taki jest błąd:
Catchable fatal error: Object of class DOMDocument could not be converted to string in D:\Programy\WebServ\httpd-users\dom\index.php on line 4 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
czy macie może linka do jakiegoś poradnika, ale w języku polskim?
może być też temat na tym forum, gdzie ktoś to jakoś objaśnił |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
niestety większość materiałów jest po angielsku... jeśli cokolwiek kumasz to jak najwięcej czytaj i próbuj pisać kod trochę metodą prób i błędów - prędzej i zapamiętasz i zrozumiesz... jednak musisz nauczyć się z grubsza rozumieć bądź po swojemu debugować kod...
jeśli chodzi o DOM to świetne narzędzie - nie wszędzie wygodnie jest korzystać z wyrażeń regularnych a i to nie wszyscy je rozumią... jeśli dokument chcesz odpytywać przez selektory CSS jak w jQuery to w google znajdziesz odpowiednie biblioteki jak PHPQuery itd... ale bez tych bibliotek możesz też skorzystać ze ścieżek XPath (łatwo jest sobie przekształcić selector CSS na wyrażenie XPath) DOMXPath::query |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
zrobiłem postępy w temacie, ale zatrzymałem się na tym:
Chcę zrobić pętle, aby wybrane pola w konkretnym <category> pokazały się w odpowiedni sposób: id: 1 name: AAA id: 2 name: BBB Wszystko jest ok, ale wartości się nie pokazują Ten post edytował marcinek37 9.04.2013, 00:03:41 |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Wszystko jest ok, ale wartości się nie pokazują No to skoro się nie pokazują to chyba jednak nie jest ok....Włączy wyświetlanie wszytkich błędów, a dowiesz się czemu się nie pokazują. Temat: Jak poprawnie zada pytanie getElementsByTagName zwraca listę elementów a trudno oczekiwać by lista miała parametr nodeValue. To pojedynczy element ma taki parametr a nie lista |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Po dodaniu tego kodu pokazują się takie błędy:
Notice: Undefined property: DOMNodeList::$nodeValue in D:\Programy\WebServ\httpd-users\dom\index.php on line 20 Ale jeśli dam ten kod:
to pokazują się wartości, ale wszystkie na raz i nie wiem, jak z tego $category->nodeValue; wziąć konkretne parametry, najpierw id a potem name szukałem na tym forum i w internecie i wszędzie wyszukuje się tylko jedno pole, a ja szukam jednego pola, pod którym są kolejne dwa - i w tym problem |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
u Ciebie brakowało pobranie elementów z listy czyli ->item(0)... foreach sam przeiterował tą listę... poczytaj o podobieństwach XPath do selektorów CSS to na szybki start da Ci wiele możliwości, czytelniejszy i krótszy zapis... ale jak wolisz... przykład dałem z XPath a swój popraw i staraj się czytać błędy ze zrozumieniem, gdyż DOMNodeList nie ma własności nodeValue ;p PS. przy bardzo duuuużych plikach XML i tak będziesz musiał skorzystać z SAX ;] - to dopiero dla Ciebie pewnie będzie hardkor ;] Ten post edytował zegarek84 9.04.2013, 20:45:24 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
świetnie, działa!
a powiedz mi, "duże" pliki, tzn. jakie? 10MB? |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
to zależy od ustawień serwera... ale każdy plik wczytywany w całości zawsze w pamięci zajmuje co najmniej tyle, co sam plik, a do tego parsowany w całości obiektami typu DOM znacznie więcej, gdyż na każdy z elementów jest tworzony nowy obiekt...
póki nie będziesz musiał zbyt często otwierać duuużych plików XML to wystarczy zwiększyć pamięć wykonywanego skryptu... ale jeśli pliku już będą naprawdę duże lub mniejsze a duże pliki będziesz musiał otwierać baaaaaaardzo często to już coś z tym będziesz musiał zrobić... pierwsza rzecz, jaka przychodzi większości to czytanie pliku po fragmencie i korzystanie z wyrażeń regularnych (nie polecam - choć polecam znać wyr. reg. ;]), w zasadzie jeśli pliku nie będzie można rozbić i będzie on na prawdę duży to przy niskim zużyciu pamięci można go odczytać poprzez SAX (w google hasło "php SAX"), jednak na razie tego tematu nie ruszaj puki nie potrzebujesz a tym bardziej, jeśli nic nie programowałeś zdarzeniowo... |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
ok, a masz może jakiegoś linka do jakiegoś poradnika, który krok po kroku wyjaśni DOM?
ale coś innego niż to, co daje manual |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
popisz trochę w JavaScript, korzystaj z narzędzi typu firebug i narzędzi deweloperskich np. w google chrome i przeglądaj drzewo DOM, tam już z musu musisz wszystkie elementy html traktować jako osobny obiekt, a przeglądając drzewo DOM w narzędziach deweloperskich widzisz, jak dokument został wygenerowany itd... DOM to ogólny model obiektowy dokumentu i jest uniwersalny nie ważne, w jakim języku programowania... bardzo modne i wygodne stało się wyszukiwanie elementów DOM po selektorach CSS - stąd m.in. pierwotna popularność jQuery... choć w czystym JS są już metody typu .querySelektorAll...
jednak jeśli po stronie PHP nie chcesz korzystać z musu z zewnętrznych bibliotek wyszukujących po selektorach CSS to musisz poczytać o podobieństwach XPath do selektorów CSS i o konwersji selektorów CSS do XPath, ale jak załapiesz podstawy to zauważysz duże podobieństwo... dodatkowo XPath oferuje Ci więcej niż wyszukiwanie po selektorach CSS operując na dokumencie XML czy ściągniętej parsowanej stronie np. przez CURL... niestety większość materiałów jest po angielsku i tak z kopyta nie przytoczę Ci linków, jedynie daję wskazówki jak spróbować to łyknąć... dodatkowo w manualu PHP jeśli nie bardzo rozumiesz jak z danej funkcji korzystać lub co może być nie tak to warto przejrzeć też komentarze pod daną funkcją... samo pisanie styli CSS też daje spojrzenie jakie elementy zostaną ostylowane, tj. prawie jakbyś szukał te elementy po selektorach CSS... więc możesz trochę pobawić się z "grafiką", ale przecież tym nie musisz się zajmować, jednak da Ci szersze spojrzenie... poczytaj o selektorach CSS3 gdyż jak załapiesz XPath to szybko je też dasz radę przekonwertować - ale to do bardziej zaawansowanego wyszukiwania... pisząc kod HTML staraj się robić odpowiednie wcięcia, domknięcia na tym samym poziomie zagłębienia - będziesz wtedy lepiej w czystym kodzie HTML widział "obiekty" jeśli chodzi o parsowanie stron to wygodny też jest silnik WebKit ale w C++ w Qt - jednak jest to inny język programowania... Ten post edytował zegarek84 10.04.2013, 11:52:54 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
1. mam już troszkę rozszerzony kod:
2. $photo1 ściąga dane bezpośrednio z elementu "photo1", w ogóle omija fakt, że jest jeszcze wcześniej w elemencie "photos" - to chyba nieeleganckie, próbowałem wielu metod, aby w kodzie to zapisać, że element "photo1" jest w elemencie "photos", jednak zawsze wyrzucało błędy albo nie pokazywało niczego - jak mogę to ładnie zapisać? 3. element "text" ma kod HTML, który jest od razu kasowany, wyczytałem, że jest potrzebna funkcja DOMinnerHTML jednak przykład z manuala był o wiele prostszy niż ten, dlatego nie potrafię go zastosować - chcę, aby HTML został jedynie w elemencie "text"; tutaj również próbowałem na kilka sposóbów i żaden nie dał efektu... domyślam się, że moje oba problemy to pikuś, ale nie wiem, jak się za to zabrać :/ Ten post edytował marcinek37 10.04.2013, 23:43:36 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
przede wszystkim zawsze wyświetlaj sobie błędy:
error_reporting(E_ALL|E_STRICT); ini_set('display_errors', '1'); po drugie nie zawsze miałeś elementy których szukałeś
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
bardzo Ci dziękuję!
1. specjalnie w drugim przypadku nie dałem wszystkich pól, aby sprawdzić, jak się zachowa skrypt 2. a co z nieeleganckim zapisem? od razu szuka photo1 $oPhoto1 = $category->getElementsByTagName('photo1')->item(0); omijając fakt, że jest w "photos" 3. mógłbyć zapisać mi ten kod w najproszej wersji $id = $oId ? $oId->nodeValue : '';? normalnie w instrukcji warunkowej:
4. i dlaczego jest ten dwukropek na końcu? $oId->nodeValue : ''; 5. naprawdę nie przypominasz sobie jakiegoś prostego poradnika, choćby w języku angielskim? albo jakąś książkę? nie chcę tutaj ciągle pytać o takie bzdety... |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
2. a co z nieeleganckim zapisem? od razu szuka photo1 $oPhoto1 = $category->getElementsByTagName('photo1')->item(0); omijając fakt, że jest w "photos" 3. mógłbyć zapisać mi ten kod w najproszej wersji $id = $oId ? $oId->nodeValue : '';? normalnie w instrukcji warunkowej: ... przeanalizuj poniższy kod 4. i dlaczego jest ten dwukropek na końcu? $oId->nodeValue : ''; brakuje Ci podstaw programowania w dowolnym języku, jest to skrócony zapis przypisania wartości odpowiadający instrukcji if(){$zmienna = ...}else{$zmienna = } 5. naprawdę nie przypominasz sobie jakiegoś prostego poradnika, choćby w języku angielskim? albo jakąś książkę? nie chcę tutaj ciągle pytać o takie bzdety... How to map CSS selectors to XPath queries XPath and CSS Selectors Korzystając z wyrażeń xpath masz większe możliwości i kontrolę wyszukiwanych elementów
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
czyli muszę korzystać z DOMDocument oraz DOMXPath, aby elegancko przerobić konkretne dane - bardzo dziękuję
co do tych totalnych podstaw... to fakt, mam duże braki, dlatego czytam książkę z heliona, ale nie ma tam rozdziału o spodobach zapisu kodu, jeśli i w tym temacie masz coś ciekawego do poczytania, zrobię to bardzo chętnie |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
z PHP tak na szybko to przeczytaj sobie np. to:
http://framework.zend.com/manual/1.12/en/c...g-standard.html nie patrz, że to ze strony ZF, na stronie SYMFONY gdzieś była chyba podobna strona... zresztą jak nie wybrałeś jakiegoś FW to i tak kiedyś będziesz musiał ;]... a stosując się do dobrych praktyk nawet jak nie będziesz mógł skorzystać z gotowego FW to bez problemu napiszesz szkielet podstawowy mini FW... jest wiele konwencji zapisu zmiennych, sposobów formatowania kodu... ogólnie musisz próbować do jakiejś się dostosować ale bez przesady... np. zmienne prywatne w prototypach obiektów w JavaScript w zasadzie da się zdefiniować tylko przez konwencję stosując znak podkreślenia na początku _zmienna... choć tą konwencję niektórzy wykorzystują też przy innych językach zważywszy na podpowiadanie kodu przez IDE... nazwy klas powinno zaczynać się dużymi literami, a instancje tych klas z małych już... przy wielu podstawowych zmiennych często pierwsza litera zmiennej może określać typ jak np. $iLat - zmienna typu integer - stąd np. w powyższym kodzie niektóre zmienne poprzedziłem "o" (od obiekt). Jeśli nazwa zmiennej jest wieloczłonowa to należy zdecydować się na jeden ze sposobów zapisu np. moja_dluga_zmienna lub mojaDlugaZmienna szczerze powiedziawszy to musisz kodować - większe projekty wymusza na tobie stosowanie dobrych praktyk, odpowiedniego nazywania zmiennych, wcięć, odpowiedniego ułożenia i nazywania plików do PHP na helionie wielu poleci Ci książkę typu "PHP obiekty wzorce i narzędzia" "PHP object, pattern and practice" 3 edycja (jak możesz to czytaj po ang.), ale nie pamiętam, czy jest tam o formatowaniu kodu, jednak ja też tą pozycję polecam... czytając nowsze pozycje raczej autorzy stosują dobre praktyki... samych książek z formatowaniem kodu to za bardzo nie pamiętam czy są dobre czy nie ale nasuwają mi się 2 pozycje: "Clean Code" "Code Craft - the practice of writing excellent code" |
|
|
![]()
Post
#21
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
troszkę ciekawych informacji z tego linka wyciągnąłem, bardzo Ci dziękuję - ponownie (IMG:style_emoticons/default/wink.gif)
powstał u mnie kolejny problem:
jak widzisz, tworzę już swoje pliki xml (progress jest), jednak element <name> ma zamieniane znaczniki HTML w np. <b>. całość wygenerowanego pliku wygląda tak: <?xml version="1.0" encoding="utf-8"?> <products_list> <product> <id>1</id> <name><b>AAA</b></name> </product> </products_list> a powinna tak: <?xml version="1.0" encoding="utf-8"?> <products_list> <product> <id>1</id> <name><b>AAA</b></name> </product> </products_list> |
|
|
![]()
Post
#22
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
jak widzisz, tworzę już swoje pliki xml (progress jest), jednak element <name> ma zamieniane znaczniki HTML w np. <b> nadeszła chwila relaksu, a że nie jestem programistą z zawodu to nie znam funkcji na pamięć więc pewnie wkradną się błędy lub możesz nie bardzo zrozumieć to co piszę skoro jestem pod wpływem ;p no właśnie to poprawne działanie - w JavaScript podobny fragment kody wykorzystuje się do implementacji funkcji typu escapeHTML encodeHTML gdzie na odpowiednie znaczniki zamienia się znaki typu <> itd... by np. wyświetlić potem kod HTML... pod tym kontem spojrzyj, to nie będziesz widział błędu ;] rozwiązanie na szybko jak jestem pod wpływem - luknij która funkcja zamienia tak na encje w manualu php i są jej odpowiedniki do dekodowania - więc w XML'u możesz przechowywać strukturę zakodowaną - co w sumie było by poprawne, gdyż nie przewidywałeś tam dodatkowych elementów drzewa XML (nie patrz na kod HTML ;p) - ps. jeśli jest tam możliwość niepoprawnej struktury XML to niech lepiej to zostanie zakodowane by nie rozwaliło Ci pliku XML (analogia do HTML iniection)... drugie rozwiązanie na szybko jak jestem pod wpływem przypomina tą funkcję którą robiłeś z innerHTML - po prostu pokombinuj, jak zaimportować już Elementy a nie tekst ;] - jak sam poprubujesz to nawet jak nie dasz rady prędzej to zapamiętasz... daj kod co tam zrobiłeś, jak będę miał czas to może poprawię ;] - ale nie nastawiaj się, że będę miał czas gdyż mam swoje zajęcia jutro (już dziś ;p) w sobotę też a w niedzielę rodzinkę pasuje odwiedzić ;p pozdro... Ten post edytował zegarek84 11.04.2013, 23:24:07 |
|
|
![]()
Post
#23
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
1. wydaje się, że to ta metoda: createElement przerabia kod HTML na encje
a nie ma ona żadnych dodatkowych parametrów... zrobiłem to łopatologicznie - wygenerowałem plik, a potem go przerobiłem innym skryptem - innego rozwiązania chyba nie znajdziemy 2. postanowiłem wgłębić się w DOM, dla przykładu chcę wykonać listę linków znajdujących się na onecie
no i pokazała się ogromna lista błędów - czyja to wina? skryptu czy onetu? Ten post edytował marcinek37 12.04.2013, 01:29:44 |
|
|
![]()
Post
#24
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
HTML nie zawsze jest poprawnym dokumentem XML ;] - więc ze stronami niemal zawsze będzie podobnie... mając tego świadomość możesz wyłączyć wyświetlanie błędów przy tej funkcji
@$objDOM->load("http://www.onet.pl"); kod strony zapisanej z obiektu DOM może trochę odbiegać od źródeł... gdy będziesz więcej programował i poznawał inne języki to polecam korzystanie z silnika przeglądarki np. WebKit w Fremworku Qt (ale to już język C++)... na razie nie przejmuj się tymi błędami... jednak możesz mieć problemy z kodowaniem niektórych stron - czytaj dokumentację i komentarze jak sobie z tym poradzić ;] - dasz radę... wszystkie linki w wyr. xpath nie ważne gdzie się znajdują to po prostu "//a", z kolei wewnątrz jakiegoś obiektu o określonym id nie bezpośrednie dzieci to "//*[@id="cos_tam"]//a" - zwracaj uwagę kiedy np. stosować "//" a kiedy "/", ale to już chyba doczytałeś... i podobnie jak przykłady wyżej jeśli szukasz xpath względem jakiegoś elementu to zaczynaj wyrażenie od "./" ps. względem wyr. CSS "//" odpowiada spacji " " a "/" odpowiada ">" 1. wydaje się, że to ta metoda: createElement przerabia kod HTML na encje a nie ma ona żadnych dodatkowych parametrów... zrobiłem to łopatologicznie - wygenerowałem plik, a potem go przerobiłem innym skryptem - innego rozwiązania chyba nie znajdziemy
2. postanowiłem wgłębić się w DOM, dla przykładu chcę wykonać listę linków znajdujących się na onecie
no i pokazała się ogromna lista błędów - czyja to wina? skryptu czy onetu?
Ten post edytował zegarek84 12.04.2013, 12:14:15 |
|
|
![]()
Post
#25
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
bardzo dziękuję za informacje
szkoda tylko, że trzeba używaż dwóch modeli: DOM i xpath, ale to chyba da się ogarnąć (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#26
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
poprawiłem powyższy kod - xpath nie musisz używać ale problem był, jeśli miałeś np $sName = 'cokolwiek' jako zwykły string np. z bazy - dodawało paragraf to to poprawiłem i będziesz miał poprawne elementy nawet przy nie poprawnym HTML'u - luknij teraz...
Ten post edytował zegarek84 12.04.2013, 12:16:32 |
|
|
![]()
Post
#27
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
na razie nie chcę korzystać z DOMXPath, a skupić się wyłącznie na DOMDocument
martwi mnie, że ten kod nie pokazuje niczego:
to przez te błędy, czy po prostu bez DOMXPath nic nie zrobię? |
|
|
![]()
Post
#28
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
przecież napisałem Ci wyżej, iż .load służy do wczytywania plików XML - strona nie ma poprawnego formatu xml miałeś skorzystać z funkcji .loadHTMLFile
|
|
|
![]()
Post
#29
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
przepraszam, źle odczytałem Twoje wskazówki, jest jeszcze jeden mały kłopot, a mianowicie brak polskich znaków:
to chyba ostatni problem, bo całą resztę zaczynam ogarniać, w dużej mierze dzięki Tobie (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#30
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
nie jestem z zawodu programistą ale dawniej do parsowania gry www właśnie korzystałem z PHP i DOM ^^ - niestety z kodowaniem trzeba wziąć sprawy w swoje ręce... oprócz kodu przeczytaj komentarze w tej funkcji:
DOMDocument::loadHTML więc plik musiałby albo zawierać na początku dyrektywę kodowania albo trzeba przekonwertować źródło i znaki UTF-8 do encji html... preferuję to drugie podejście... kodowanie na stronie możesz rozpoznać dwojako, albo z nagłówków odpowiedzi jeśli byś korzystał z CURL'a albo z tagu meta określającego kodowanie... no ale żeby go odczytać to musisz w pierw wczytać dokument jakim jest (chyba, że wolisz bawić się z wyrażeniami regularnymi ale nie polecam) - i to podejście Ci na początku polecam... inne rozwiązanie by zmniejszyć pamięć (choć w sumie nie musisz zwłaszcza w celach ćwiczebnych) to ten tag meta odszukać przez SAX i przerwać przeglądanie dokumentu po znalezieniu kodowania - ale na tym etapie wiedzy jak Ci wspominałem wcześniej nawet tego nie dotykaj ;p a teraz jak znasz kodowanie strony to możesz zrobić np. w ten sposób:
w ostatniej linijce nie musisz konwertować z powrotem, ale podejrzewam, iż nie chcesz encji ;] a jeśli nie znasz kodowania to na Twój aktualny poziom wiedzy można by np. w ten sposób:
ps. przypomniałem sobie i może Cię to zainteresować, a raczej powinieneś się zainteresować jeśli zamierzasz parsować strony luknij na tą rozwijaną bibliotekę: https://github.com/html5lib/html5lib-php info o niej pośrednio ze strony: http://ejohn.org/blog/pure-javascript-html-parser/ Ten post edytował zegarek84 13.04.2013, 00:13:24 |
|
|
![]()
Post
#31
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
przepraszam, że odpisuję Ci dopiero teraz, ale cały weekend byłem poza komputerem...
bardzo, ale to bardzo mi pomogłeś, wszystko jak na razie rozumiem, dziękuję i pozdrawiam (IMG:style_emoticons/default/wink.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.09.2025 - 00:21 |