![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 12.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam problem z polskimi znakami (kodowaniem do utf-8) przy używaniu curl'a i domdocument'a przy parsowaniu innej strony. Próbowałem już wielu rozwiązań, m.in. php scraper'a z php.net, podmianą funkcjami kodujacymi itp. Gdy wyświetlam ściągnięte dane poprzez mb_detect_encoding(), część stringów jest faktycznie w utf-8, a część w ASCII. Męczę się już dłuższy czas, dlatego postanowiłem zaciągnąć rady u Was. Poniżej podaję kod (jest to ostatnia wersja z częścią próby poradzenia sobie z problem zaciągniętym na php.net, pominę ten moment):
Za wszelkie podpowiedzi serdecznie dziękuje. Jeżeli czegoś brakuje w powyższym kodzie, chętnie ponownie dodam brakujące elementy. Pozdrawiam. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
Cytat $html=preg_replace('/<head[^>]*>/','<head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">', $all[$i]); wszystko ładnie i pięknie (ta kolejna próba zmiany kodowania ;p) ale Ty to robisz nie na źródle a na linkach wyciągniętych ze źródła ;p ];-> kiedyś (dawniej jak grałem w plemiona) miałem podobny problem - i rozwiązaniem było wstawienie meta bezpośrednio na początku <head>... (ale i wyrażenia regularne tutaj też są nad wyraz)... poza tym o ile mi wiadomo przy nowszej wersji php DOM domyślnie źródło traktuje kodowaniem utf-8 Cytat $html=preg_replace('/<head[^>]*>/','<head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">', $all[$i]); @$dom->loadHTMLFile( $html ); pomińmy wyrażenie regularne... ale w tym momencie pytanie - korzystasz z tego curl'a czy nie i masz url_open na true ustawiony (jakoś tak się to zwie - trochum wstawiony ;p)... dokładniej to w zmiennej $html tutaj masz adres internetowy ("pełny" z http/www lub nie - jeśli pełny to zapewne bez problemu otwiera daną stronę bez curl'a - ale i bez ciasteczek i plusów związanych z curl'em lub innych tego typu bibliotek)... w pętli wcześniejszej do tablicy all zapisywałeś wartości atrybutów href... pobierając nowy dokument (bez udziału curl'a) jeśli brakowało tego meta to go nie wstawiałeś (a jeśli było to w niektórych przypadkach nie wystarczało, że jest i nie jest definiowane w pierwszej kolejności w head...) - w każdym bądź razie wykrycie wartości i innych rzeczy do końca head nie stanowi najmniejszego problemu gdyż tam nie ma znaków specjalnych... ps. nie wyciszaj błędów - po to one są by coś sygnalizować - zwłaszcza, że szukasz choćby teraz błędów... Ten post edytował zegarek84 5.10.2010, 18:33:25 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 12.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedź. Zaraz usiąde i pokombinuje na nowo.
To jest już chyba 5ta wersja podejścia do tego problemu i tak to teraz wygląda. Zauważyłem na wielu forach (nie tylko polskich), że sporo osób ma takie same problemy, z którymi sobie radzą najczęściej przy użyciu iconv (co u mnie nie zadziałało). U mnie przy ściąganiu tej zewnętrznej strony część wyciągniętych znaków jest kodowana w ASCII, a mniejsza część normalnie w UTF-8 (które i tak posiadają krzaki). Dziwne. Dodatkowo się zastanawiałem czy istnieje również możliwość, że winą za takie "krzaczki" można obarczyć na przykład jakiś pośredniczący system operacyjny bądź jeszcze co innego? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Dawno się curlem nie bawiłem i mogę się mylić ale po pobraniu strony sprawdź jej kodowanie [$charset = preg_replace()] i wstaw to:
Nie jestem pewien ale zapis strony w odpowiednim kodowaniu również wpływa na wyświetlanie "krzaczków" |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 09:12 |