Musiałem spróbować "naprawić" wiele zepsutych sytuacji UTF8 w przeszłości, i niestety to nigdy nie jest łatwe, a często raczej niemożliwe.
Jeśli nie można dokładnie ustalić, jak został złamany, i zawsze był łamany w dokładnie taki sam sposób, trudno będzie "cofnąć" obrażenia.
Jeśli chcesz spróbować zniwelować obrażenia, najlepszym rozwiązaniem byłoby rozpoczęcie pisania przykładowego kodu, w którym spróbujesz różnych odmian połączeń z mb_convert_encoding(), aby sprawdzić, czy możesz znaleźć kombinację "od" i "to", które poprawia twoje dane. W końcu często lepiej nie martwić się o utrwalanie starych danych z powodu poziomu bólu, ale zamiast tego po prostu naprawiać rzeczy w przyszłości.
Jednak przed wykonaniem tej czynności należy się upewnić, że naprawiono wszystko, co powoduje ten problem. Wspomniałeś już, że sortowanie tabel DB i edytory są ustawione poprawnie.Ale istnieje więcej miejsc, gdzie trzeba sprawdzić, aby upewnić się, że wszystko jest prawidłowo UTF-8:
- Upewnij się, że kod HTML służą jako UTF-8:
- nagłówku ("Content Wpisz: text/html; charset = utf-8 ");
- Zmiana domyślnego kodowania PHP na UTF-8:
- ini_set ("default_charset", 'UTF-8');
- Jeśli baza danych nie zawsze mówić w UTF-8, a następnie być może trzeba powiedzieć go na za połączenia podstawy, aby upewnić się, że jest w UTF-8 trybie, w MySQL to zrobić poprzez emisję:
- może trzeba poinformować serwer WWW, aby zawsze starają się mówić w UTF-8, w Apache ta komenda jest:
- Wreszcie, ZAWSZE upewnij się, że korzystasz z funkcji PHP, które są poprawnie reklamowane przez UTF-8. Oznacza to zawsze używanie funkcji ciągów znaków "wielobajtowych" w stylu mb_*. Oznacza to także, że podczas wywoływania funkcji, takich jak htmlspecialchars(), na końcu należy podać odpowiedni parametr zestawu znaków "utf-8", aby upewnić się, że nie koduje on niepoprawnie.
Jeśli nie zauważysz żadnego kroku przez cały proces, kodowanie może zostać zmanipulowane i pojawią się problemy. Kiedy jednak wejdziesz w "groove" robienia utf-8, wszystko stanie się drugą naturą. Oczywiście PHP6 ma być w pełni unikodową skargą od getgo, co znacznie ułatwi (mam nadzieję)
Być może można wymienić postacie te mają reprezentować? A może zrzut heksadecymalny? – Managu
Szybki wygląd sugeruje, że twoje struny mogły być "podwójnie" zakodowane w utf-8. To znaczy. zakodowane w utf-8, bajty te są traktowane jako znaki Unicode, a wynik zakodowany w utf-8. Idąc wstecz: "î" = "\ xC3 \ x83 \ xC2 \ xAE" <- (utf-8) - "\ xC3 \ xAE" <- (utf-8) - "\ xEE" = "î". A może nie - niewiele danych do zdiagnozowania tutaj. – Managu
Możliwe, że był podwójnie zakodowany. Czy istnieje bezpieczny sposób programowego sprawdzenia tego, a jeśli tak, jaki jest najlepszy sposób bezpiecznego odkodowania podwójnego kodowania? – Jayrox