![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 86 Pomógł: 16 Dołączył: 2.12.2009 Skąd: Płock/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam sobie plik XML z którego potrzebuje wyciągnąć dane. Robię to przez simplexml_load_file(). Xml jak i plik php w którym chcę to wyświetlać są w kodowaniu iso-8859-2. Jak wiadomo stringi w obiekcie stworzonym przez funkcję simplexml_load_file() bedą w UTF-8. Zastosowałem więc: przed wyświetleniem. Skrypt sobie działał aż do czasu kiedy w XML znalazł tekst hiszpański. Mówię okej - nie ma problemu zamienimy na encje i szafa gra... i tak grała dopóki niezauważyłem że po konwersji prze iconv() obcina tekst po tylko niektórych encjach... są to np. ñ (ñ), ¡ (¡) czy è (è) ... czyli mamy:
co przy stringu: "to jest tekst ñ ¡ è a to dalsza część" przed iconv() mamy na stronie: "to jest tekst KRZAKI KRZAKI KRZAKI a to dalsza część" - bo string jest utf-ie a po iconv() mamy: "to jest tekst " do tej pory rozwiązałem to w sposób taki, że jak już mamy w xmlu encje w postaci &#cyferki; to w encjach zamieniam jeszcze znaki "&" i "#" na encje- i wtedy jest okej, ale moje pytanko - czy nie ma innego rozwiązania żeby to poprawnie wszystko wyświetlać bez przesadnej gimnastyki? Co radzicie? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 107 Pomógł: 9 Dołączył: 16.02.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Miałem podobny problem. Iconv nie jest idealny i też mi obcinał tekst gdy trafiał na jakieś nieznane mu znaczki.
Spróbuj dodać switch IGNORE do iconv czyli: iconv('UTF-8', 'ISO-8859-2//IGNORE', $string); lub TRANSLIT//IGNORE czyli: iconv('UTF-8', 'ISO-8859-2//TRANSLIT//IGNORE', $string); Ale na php.net pisze jeden gość że miał problem z tym drugim. Skrypt się zatrzymywał na pierwszym nieznanym znaku. -------------------- Wszystko należy robić najprościej jak się da, ale nie prościej
Albert Einstein |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 86 Pomógł: 16 Dołączył: 2.12.2009 Skąd: Płock/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Hej,
no niestety nie działa to tak jak potrzeba, Translit przepisuje mi znaki np: ñ zamienia na ~n, natomiast ¡ zamienia na ! Ignore - pomija nieznane znaki zależy mi na tym żeby te znaki były wyświetlane - znaki diakrytyczne ważna rzecz ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 107 Pomógł: 9 Dołączył: 16.02.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
No to wynika z tego że iconv jest do kitu zrobiony.
A mb_string próbowałeś? Dokładnie to mb_convert_encoding() -------------------- Wszystko należy robić najprościej jak się da, ale nie prościej
Albert Einstein |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 86 Pomógł: 16 Dołączył: 2.12.2009 Skąd: Płock/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
działa podobnie jak iconv ... z tym, że zamiast ucinania, dostaje "?" zamiast nierozpoznanego znaku.
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 107 Pomógł: 9 Dołączył: 16.02.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A kodowanie w tekście oryginalnym na pewno całe jest w UTF-8"? Może jest wymieszane?
Miałem tak nie raz gdy pierwotnie strona miała kodowanie ISO więc dane zapisywały się ISO. Potem była zmieniona na UTF ale nie dokonano konwersji wszystkich tekstów w bazie. Wynikiem tego była mieszanka różnych kodowań. Dane po konwersji printujesz na ekran czy zapisujesz do pliku? -------------------- Wszystko należy robić najprościej jak się da, ale nie prościej
Albert Einstein |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 86 Pomógł: 16 Dołączył: 2.12.2009 Skąd: Płock/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 107 Pomógł: 9 Dołączył: 16.02.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A spróbuj zapisać do pliku i popatrz do niego czy to samo zapisał co printuje.
Jakie kodowanie masz ustawione w META tagu? Spróbuj skasować całkiem ten tag i zobacz co będzie. Sprawdź w Firefox i np w Operze. Te znaki zapytania miałem właśnie gdy było wymieszane kodowanie. Te dane były zawsze w pliku XML czy trafiły do niego z jakiejś bazy danych? -------------------- Wszystko należy robić najprościej jak się da, ale nie prościej
Albert Einstein |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 06:10 |