Czytnik kanału RSS - Problem ze zmianą kodowania, Z utf-8 na iso-8859-2 |
Czytnik kanału RSS - Problem ze zmianą kodowania, Z utf-8 na iso-8859-2 |
26.12.2010, 17:41:02
Post
#1
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 0 Dołączył: 8.05.2010 Ostrzeżenie: (0%) |
Witam.
Chciałem na stronie wyświetlać nagłówki ew. z zajawką z kanały RSS. Próbowałem już wielu kodów, ale nie działają. Przynajmniej w mojej sytuacji, gdy stronę mam kodowaną w iso-8859-2, a kanał jest w uft-8. Wreszcie znalazłem lastRSS i już by było wszystko ok - bo wszystko ładnie zmienia, ale wywala Notice: Undefined property: lastRSS::$rsscp in C:\wamp\www\rss2\lastRSS.php on line 106, więc patrze o co chodzi w wierszu 106 w pliku lastRSS.php i jedyne co wymyśliłem to usunięcie wiersza 105 i 106 czyli:
,ale bez tego na mojej stronie działa tylko kanał w kodowaniu iso-8859-2. Kanał utf-8 - krzaki. Co mogę zrobić? Bardzo proszę Was o pomoc. Można powiedzieć że ten kod (kodowanie w iso-8859-2 i zamiana utf-8 na iso) to szczyt marzeń, którego od dawna nie mogę zdobyć. Proszę też nie piszcie że najlepiej zmienić kodowanie strony na utf-8 - bo to odpada. W kodzie zmieniłem tylko kodowanie (na iso-8859-2). Kod ze strony: http://lastrss.oslab.net/index.php?q=doc/examples - "Multilingual Agregator". Ten post edytował PiotrN 26.12.2010, 17:43:33 |
|
|
26.12.2010, 18:05:28
Post
#2
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) |
Mogę ewentualnie Ci pomóc, jeżeli masz odwagę (chęci) zaingerować w kod.
Jeżeli na serwerze masz dostępny Multibyte Strings (większość serwerów to ma), wówczas kodowanie możesz zrobić w sposób następujący:
Przy czym kodowanie wejściowe to parametr opcjonalny. Używasz go jeżeli jesteś pewien, że takie jest (jedno, w miarę stałe źródło informacji). Jeżeli nie, pomiń. W Twoim przypadku może to być:
Przy okazji: zalecam Ci zmianę kodowania swojej strony na utf-8. Możesz wygoglować site:forum.php.pl, dlaczego. -------------------- Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem. |
|
|
26.12.2010, 18:18:06
Post
#3
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 0 Dołączył: 8.05.2010 Ostrzeżenie: (0%) |
W danych z kanału w którym jest kodowanie iso-8859-2 zjada/pomija polskie znaki.
W danych z kanału z kodowaniem utf-8 wszystko ok Kurczę! Już myślałem że wszystko ok, bo zauważyłem że już nic nie wywala. Bardzo proszę o dalszą pomoc i dziękuję za dotychczasową. |
|
|
26.12.2010, 18:19:32
Post
#4
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) |
To spróbuj pominąć kodowanie wejściowe (niech wykrywa sam):
-------------------- Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem. |
|
|
26.12.2010, 18:25:10
Post
#5
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 0 Dołączył: 8.05.2010 Ostrzeżenie: (0%) |
Kanał z iso-8859-2 - w miejscu polskich znaków jest "?".
Kanał z utf-8 - krzaki. Przy tym w lastRSS.php:
Usunełem w tym przykładzie "Multilingual Agregator" wiersz 69 i kanał z iso działa, ale z utf nie. Ten post edytował PiotrN 26.12.2010, 19:02:22 |
|
|
26.12.2010, 19:05:37
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) |
To może sprawdzaj w jakim kodowaniu jest kanał i zmieniaj tylko ten, który jest w niewłaściwym. Do sprawdzenia kodowania możesz użyć
Jeśli mb_convert_encoding nie działa poprawnie, to możesz użyć też iconv Albo konwertować kody pojedynczych znaków http://4programmers.net/PHP/FAQ/Jak_zmieni..._funkcji_iconv_ -------------------- |
|
|
26.12.2010, 19:20:23
Post
#7
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 0 Dołączył: 8.05.2010 Ostrzeżenie: (0%) |
Przecież piszę mb_convert_encoding ani mb_detect_encoding nie działa, a w pierwszym poście jest wyraźnie użyte iconv - więc po co mam to sprawdzać i używać?
iconv z pierwszego postu:
Pomóżcie! Może macie jakiś inny kod, który na stronie z iso-8859-2 wyświetlałby poprawnie znaki utf-8 z kanału RSS? Ten post edytował PiotrN 26.12.2010, 19:21:21 |
|
|
26.12.2010, 20:02:44
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) |
mb_convert_encoding nie jest wymienne z mb_detect_encoding (pierwsza funkcja konwertuje, druga sprawdza kodowanie), użycie tego to:
Może błąd jest w kodowaniu, trzeba sprawdzić czy nagłówki są zgodne z kodowaniem treści. Zresztą przed samym konwertowaniem dobrze byłoby sprawdzać, czy kanał wymaga konwertowania. -------------------- |
|
|
26.12.2010, 21:15:08
Post
#9
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 0 Dołączył: 8.05.2010 Ostrzeżenie: (0%) |
- nie działa. Efekt: Na początku wywala: Warning: mb_convert_encoding() [function.mb-convert-encoding]: Illegal character encoding specified in C:\wamp\www\rss2\lastRSS.php on line 107 Warning: mb_convert_encoding() [function.mb-convert-encoding]: Illegal character encoding specified in C:\wamp\www\rss2\lastRSS.php on line 107 Warning: mb_convert_encoding() [function.mb-convert-encoding]: Illegal character encoding specified in C:\wamp\www\rss2\lastRSS.php on line 107 Warning: mb_convert_encoding() [function.mb-convert-encoding]: Illegal character encoding specified in C:\wamp\www\rss2\lastRSS.php on line 107 Warning: mb_convert_encoding() [function.mb-convert-encoding]: Illegal character encoding specified in C:\wamp\www\rss2\lastRSS.php on line 107 Warning: mb_convert_encoding() [function.mb-convert-encoding]: Illegal character encoding specified in C:\wamp\www\rss2\lastRSS.php on line 107 Warning: mb_convert_encoding() [function.mb-convert-encoding]: Illegal character encoding specified in C:\wamp\www\rss2\lastRSS.php on line 107 i w wersji z kodowaniem iso-8859-2 zjada litery. Wersja z utf-8 działa. Tak jak wspomniałem w pierwszym poście kod mam z http://lastrss.oslab.net/index.php?q=doc/examples - "Multilingual Agregator" + plik lastRSS.php (w zakładce "Download"). Wszystkie utf-8 zastąpiłem iso-8859-2 - w obu plikach. Majstrowałem przy wierszu 106 w pliku lastRSS.php i jestem w 99% pewny że to tam trzeba szukać. Zależy mi na prostym kodzie, który czyta kanał RSS w utf-8 i wyświetla go na stronie z kodowaniem iso-8859-2. |
|
|
26.12.2010, 21:44:40
Post
#10
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) |
A próbowałeś korzystać z tego skryptu tak jak jest, ale z podaniem ustawieniem kodowania wynikowego w zmiennej $cp?
-------------------- |
|
|
27.12.2010, 17:18:40
Post
#11
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 0 Dołączył: 8.05.2010 Ostrzeżenie: (0%) |
Mam tak (lastRSS.php):
i wywala mi: Notice: Undefined property: lastRSS::$rsscp in C:\wamp\www\rss2\lastRSS.php on line 106, a kodowanie działa poprawnie. Co zmienić żeby tego nie wywalało? Ten post edytował PiotrN 27.12.2010, 17:19:15 |
|
|
27.12.2010, 19:30:59
Post
#12
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) |
Cześć,
ukryj error_reporting, aby nie pokazywało noticów, lub zadeklaruj z początku lastRSS::$rsscp = null; (jeżeli niepotrzebne). -------------------- Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem. |
|
|
27.12.2010, 19:52:17
Post
#13
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 0 Dołączył: 8.05.2010 Ostrzeżenie: (0%) |
o dzięki Athlan! Byłbym Ci wdzięczny gdybyś napisał co mam w sumie dodać do kodu.
Czy przy tym error_reporting są że tak powiem jakieś "skutki uboczne"? Drugi sposób odpada. Ten post edytował PiotrN 27.12.2010, 19:58:25 |
|
|
27.12.2010, 21:37:46
Post
#14
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) |
Skutków ubocznych nie ma. Poziom notice m.in. to informacja, że próbujesz dodać coś do niezadeklarowanej wcześniej zmiennej. Język PHP ma tę zaletę (lub w wielu przypadkach wadę), że można nie deklarować zmiennych i się do nich odwoływać. Nie jest to dobra praktyka, ale pehap taki już jest, tak samo nie ma czegoś takiego jak typy danych przy zmiennych - każda zmienna = każdy typ.
Wystarczy, że gdzieś na początku kodu dodasz: Skutki uboczne natomiast wygenerujesz sobie, gdy będziesz miał wyłączone error_display. Wtedy do błędów nie dotrzesz, pozostaną tylko logi serwera. Pamiętaj na przyszłość (może nie w tym przypadku): Cytat Note:
Enabling E_NOTICE during development has some benefits. For debugging purposes: NOTICE messages will warn you about possible bugs in your code. For example, use of unassigned values is warned. It is extremely useful to find typos and to save time for debugging. NOTICE messages will warn you about bad style. For example, $arr[item] is better to be written as $arr['item'] since PHP tries to treat "item" as constant. If it is not a constant, PHP assumes it is a string index for the array. -------------------- Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem. |
|
|
27.12.2010, 22:25:10
Post
#15
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 0 Dołączył: 8.05.2010 Ostrzeżenie: (0%) |
Wielkie dzięki Athlan!
|
|
|
Wersja Lo-Fi | Aktualny czas: 29.03.2024 - 01:45 |