Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z konwersja utf-8 do iso-8859-2
Forum PHP.pl > Forum > PHP
lucaa44
Witam,
mam problem z konwersja ciagu z utf-8 do iso-8859-2. problem pojawial sie i byl rozwiazywany na tym forum juz nieraz, niestety dotychczasowe rozwiazania ktore przejrzalem niewiele mi pomogly

mam strone html/php ktora deklaruje kodowanie iso-8859-2 poprzez znacznik html <meta>. W przegladarce, opera 11, mam ustawiony wybor kodowania automatyczny. Strona jak wspomnialem generuje tresc dynamiczna, pobiera dane z pliku(ciag tekstowy) za pomoca metody $DOM->loadHTMLFile(), przetwarza je za pomoca kilku innych metod i jednoczesnie wyswietla(przez echo()) i wkleja do nowego pliku. Jako ze strona ma w <meta> iso dane powinny sie wyswietlac z takim kodowaniem, bez wzgledu na kodowanie wejsciowe.

Czesc przetworzonych danych wyswietla sie prawidlowo w iso mimo ze kodowanie wejsciowe to utf-8, nawet bez uzycia iconv() czy mb_convert_encoding(). Wiem ze kodowanie wejsciowe to wlasnie utf-8, bo przed samym wyswietleniem wstawilem kod z mb_detect_encoding().

Niestety czesc ktora jest przetwarzana pozniej i wczytywana z innego pliku(caly plik w postaci ciagu) wyswietla sie z 'krzakami' - (np. r?questionmark.gif?ni się - różni się). Zastosowanie iconv() czy mb_convert_encoding() nic nie daje mimo podanego kodowania wejsciowego, pobranego przy uzyciu detect_encoding(). Dane z pliku sa rowniez pobierane za pomoca metody $DOM->loadHTMLFile(), ale jest tez metoda ktora obcina puste znaki na koncu i na poczatku tego pliku, ktore powodowaly jakies bledy. NIe wiem czy ta ostatnia metoda nie namieszala na tyle ze mb_convert_encoding() ma problem z konwersja. Mimo tych ciec mb_detect_encoding() wykrywa poprawnie utf-8. Dodam jeszcze ze te same krzaki pojawiaja sie na ekranie w przegladarce jak i po otwarciu pliku wynikowego w edytorze. oto fragment kodu - wykrywanie kodowania, konwersja, zapisanie wyniku do pliku testowego, wyswietlenie wyniku:
Kod
              // wykryj kodowanie
    $encoding = $page->detect_encoding( $pagestr, __LINE__ ); // moja funkcja oparta o mb_detect_encoding()
    
    $list_encodings_arr = mb_list_encodings();
    sort($list_encodings_arr);
        
    $to_encoding = $list_encodings_arr[24]; // iso-8859-2
    echo 'Kodowanie docelowe: '.$to_encoding.'<br /><br />';
              
              // konwertuj
              $pagestr = mb_convert_encoding($pagestr, $to_encoding, $encoding );
        
    // zapisz przekonwertowany ciag do pliku
    file_put_contents( 'html_output.txt', $pagestr );
              
              // wyswietl ciag i zatrzymaj
              die( htmlspecialchars($pagestr) );



Z tego co sprawdzilem wszystkie pliki sa zapisane w iso-8859-2, chyba ze ktorys przeoczylem.
Jak dam rade dodam linki do pliku wejsciowego ktory jest poddawany obrobce i sprawia problemy i pliku wynikowego.
Czesc pliku wynikowego:
Kod
<html><head><title>Instalacja Code Igniter na serwerach w sieci</title><meta content="Instalacja CI na zwyk?‚ych serwerach dostÄ™pnych w sieci niewiele r?questionmark.gif?ni siÄ™ od instalacji na naszym lokalnym serwerze."


co zrobic z ta druga czescia kodu zeby wyswietlala sie prawidlowo, da sie jakos zmusic mb_convert_encoding by przekonwertowal ciag?

jest ktos w stanie pomoc?

dodaje linki:

plik wejsciowy -
http://chomikuj.pl/masgeo44/Dokumenty/inst...1766457503.html

plik wyjsciowy zawierajacy skonwertowany ciag -
http://chomikuj.pl/masgeo44/Dokumenty/html...,1766457501.txt

pozdrawiam
z4jc3v
  1. $pagestr = iconv($pagestr, $to_encoding//TRANSLIT, $encoding );



sprobuj tak mi kiedys pomoglo 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.