Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z mb_detect_encoding
darekHa
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.04.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
tosiek
post
Post #2





Grupa: Zarejestrowani
Postów: 142
Pomógł: 0
Dołączył: 7.07.2008

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
darekHa
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.04.2009

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
tosiek
post
Post #4





Grupa: Zarejestrowani
Postów: 142
Pomógł: 0
Dołączył: 7.07.2008

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 06:25