Niepoprawne kodownie znakow po pobraniu strony przy pomocy cURL

0

Mój skrypt pobiera informacje z wpisanego w inpucie adresu.

Za pomocą curla i wyrażeń regularnych a także, [i]get_meta_tags[/i].

I teraz mam problem, mój serwis jest w kodowaniu [b]UTF-8[/b], baza danych wszędzie: [b]utf8_unicode_ci[/b]

Przy wyciąganiu np danych z onet.pl albo interia.pl pojawiają się sławne krzaczki, albo w ogóle obcina ciąg i nie dodaje do bazy całości.

Jako że mój serwis ma być elastyczny nie mogę sobie zrobić po prostu:

$a = iconv('iso-8859-2', 'UTF8', $zmienna);

Bo wtedy strony które są w kodowaniu UTF-8 się sypią.

Próbowałem zdziałać coś funkcją [i]mb_detect_encoding[/i], jeżeli chodzi o UTF-8 to odczytuje kodowanie poprawnie, ale np iso-8859-2 już nie odczytuje więc problem występuje nadal.

Macie jakieś propozycje? może ja coś źle kminię :)

0

Kodowanie danej strony mozesz odczytac z naglowka zwrotnego HTTP albo z kodu HTML. Na onecie jest to:

<meta http-equiv="content-type" content="text/html; charset=iso-8859-2"/>

Tak wiec wiesz juz, ze ta strona nie jest zakodowana w UTF-8. Wowczas dokonujesz konwersji na UTF.

0

Hmm no tak, dobry pomysł, ale wpadłem jeszcze na coś.

mb_detect_encoding ma odczytywać kodowanie podanego stringa, ale testowałem tą funkcję i zwraca poprawnie UTF-8 , a np przy kodowaniu ISO-8859-2 już nie zwraca nic.

I teraz

Jeżeli zrobiłbym Kodowanie plików i bazy danych wg Standardów ISO-8859-2 to dane pobierane z interii lub onetu pobierały by się chyba poprawnie.

A z tego względu że mb_detect_encoding odczytuje poprawnie kodowanie UTF-8 można by go było użyć do iconv, i konwertować z UTF-8 do SO-8859-2.

Czy dobrze myślę ?

Wtedy wyglądałoby to tak:

-Pobiera dane-

-Warunek if Sprawdza czy mb_detect_encoding == 'UTF-8' -
-Jeżeli tak konwertuje go do ISO-8859-2 -

//Tutaj dalsza część kodu.

0

Tak, ale zauwaz, ze UTF-8 to jest obecnie standard, ktorego powinienes sie trzymac. To ze interia czy onet korzystaja z ISO-8859-2, to wynika z nalecialosci w przeszlosci. Nie znaczy to, ze powinienes sie tym wzorowac. I pamietaj, ze istnieja jeszcze inne standardy kodowania ;) Co w przypadku, gdy strona bedzie posiadala kodowanie Windows-1250?

Moim zdaniem powinienes trzymac sie UTF-8

0

Ok dzięki, dobrze tak porozmawiać o swoich pomysłach.
Chyba się tutaj zarejestruje bo już mam miłe doświadczenia :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1