Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z mb_detect_encoding
Forum PHP.pl > Forum > Przedszkole
darekHa
Witam

W php to moje początki, więc proszę o wyrozumiałość.

Piszę skrypt, który pobierze zawartość strony i przeszuka pobrany kod w poszukiwaniu zadanego wzorca.

Niby proste, ale ja mam wzorzec zapisywany u utf-8, a strony mają różne kodowanie: utf-8, iso-8859-2, iso-8859-1, windows-1250 itd.

Idea jest taka:
1. Pobrać kod strony używając "file_get_contents()";
2. Sprawdzić kodowanie strony i ewentualnie zamienić na utf-8;
3. Wyszukać wzorzec.

Problem stanowi punkt 2!

Przykład - odczytanie kodowania strony Onet.pl - kodowanie iso-8895-2

Więc napisałem:

Kod

$zawartosc = file_get_contents("http://www.onet.pl");

$siteCoding = mb_detect_encoding($zawartosc, 'UTF-8, ISO-8859-1, ISO-8859-2', true);

echo $siteCoding;


No i zwraca iso-8859-1 zamiast iso-8859-2.

Gdzie robię błąd? Bo potem chciałem zrobić:
Kod
if($siteCoding != 'UTF-8')
     $zawartosc = mb_convert_encoding($zawartosc, "UTF-8", $siteCoding);


No ale nie mogę, bo mb_detect_encoding() zwraca nie to co trzeba.
tosiek
Mi też nie chciało działać: mb_detect_encoding.

Zapisz w zmiennej np. $ciag ciąg który chcesz znaleźć i potem zależnie od tego jakie kodowanie jest zdefiniowane w:

Kod
$zawartosc = file_get_contents("http://www.onet.pl");

prze konwertuj tą zmienną na takie kodowanie jakie znalazłeś w $zawartosc i dopiero po konwersji szukaj w $zawartosc tego ciągu smile.gif

Na około ale działa smile.gif PS. w iso-8859-1 nie ma polskich znaków
darekHa
To nie zadziała gdyż

Kod
mb_detect_encoding($zawartosc, 'UTF-8, ISO-8859-1, ISO-8859-2', true);


zwraca mi złą wartość! Tym samym nie mogę rozpoznać czy chodzi o iso-8859-1 czy -2

Badam Onet.pl, oni mają 8859-2, a mb_detect_encoding zwarca mi 8859-1 i po prostu nie mam jak sprawdzić jakie jest to nieszczęsne kodowanie.


Wie ktoś co tu jest źle, albo jak sprawdzać w jakiś inny sposób?
tosiek
Sposoby sprawdzania:
1. Nagłówki HTTP - Content-Type, onet nie zwraca kodowania odpada.

2.
  1. <?php
  2. $zawartosc = file_get_contents("http://www.onet.pl");
  3. if(preg_match("/content-type/", $zawartosc))
  4. {
  5.     preg_match("/charset=(.*)/", $zawartosc, $zawartosc2);
  6. }
  7. ?>


coś w ten deseń. już pisałem o tym wczesniej. potem konwertujesz to co chesz znaleźć na taki kodowanie jakei znalazłeś smile.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.