![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 19.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam, piszę skrypt który z podanej przez użytkownika strony wyciąga tytuł, opis oraz tagi OpenGraphProtocol. Skrypt wygląda tak, że przez CURL pobierane jest źródło strony a następnie przez preg_match() pobierane są interesujące mnie dane. Wszystko ładnie gdyby nie to, że strony są w różnych kodowaniach i skrypt rzuca krzaczkami. Próbowałem napisać funkcję, która zwróci mi "naprawiony" string z polskimi literami używając głównie mb_detect_encoding() i iconv(), jednak żadne rozwiązanie nie było na tyle dobre aby rozwiązać problem do końca. Jeśli coś działało mi np przy ISO-8859-2 nie działalo np przy UTF-8 itd.
Szukałem rozwiązania i na forum.php.pl i na innych ale nie znalazłem nic co rozwiązałoby problem, a mi samemu skończyły się już pomysły. Miał ktoś kiedyś podobny problem? Jakiś pomysł na wykonanie tego? Liczę na Waszą pomoc (IMG:style_emoticons/default/wink.gif) . Pozdrawiam. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 97 Pomógł: 20 Dołączył: 18.12.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Skoro umiesz wyciągnąć dane takie jak tytuł to nie możesz też odczytać kodowania strony?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 207 Pomógł: 44 Dołączył: 18.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Przy pobieraniu danych ze strony, ona informuje cię o kodowaniu. Zobacz czy da się ją poprawnie przetworzyć jako dokument XML. Wtedy wsio powinno iść z automatu.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 19.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Tylko, że kodowanie strony może zupełnie nie być podane w meta tagach ani nagłówku...
Męcząc się z problemem dalej napisałem coś takiego:
Wygląda na to, że działa z wyjątkiem niektórych stron kodowanych w UTF-8. Otóż np wklejając link do filmu z YT w tytule mam polskie znaki ale w opisie już nie. Gdy na zmienną $iconv dam utf8_decode() polskie znaki są w opisie a nie ma w tytule. Istnieje jakiś sposób, żeby (najprawdopodobniej przez preg_match) sprawdzić czy tekst ma jakiekolwiek krzaki? Ten post edytował Domon 19.04.2012, 14:03:03 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Kodowanie masz podane w nagłówku Content-Type. Jeżeli go tam nie ma, powinieneś przyjąć, że treść kodowania jest przy użyciu ISO-8859-1.
Cytat The "charset" parameter is used with some media types to define the character set (section 3.4) of the data. When no explicit charset parameter is provided by the sender, media subtypes of the "text" type are defined to have a default charset value of "ISO-8859-1" when received via HTTP. Data in character sets other than "ISO-8859-1" or its subsets MUST be labeled with an appropriate charset value.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 207 Pomógł: 44 Dołączył: 18.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ew możesz sprawdzić zakres znaków. Jak zakres się zgadza to masz dobre kodowanie. Nie wiem, kombinuje :)
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@maniana: Jaki zakres znaków?
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 207 Pomógł: 44 Dołączył: 18.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdzenie regexpem nie pokaże że są krzaczki? Np przepuszczasz tylko a-z0-9 + znaki dodatkowe? Nie wiem czy to ma sens...
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 19.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nieco na odwrót niż zamierzałem w poprzednim poście, bo tam chciałem szukać krzaków a tu szukam polskich liter (IMG:style_emoticons/default/smile.gif) . Ale ważne, że w końcu działa.
Dla potomnych:
Ten post edytował Domon 19.04.2012, 18:53:31 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.09.2025 - 17:18 |