Odczytywanie wielu tekstów z różnych kanałów RSS i wstawianie ich do mojej bazy danych.
Oczywiście istnieje kilka różnych kodowań znaków używanych w kanałach, np. UTF-8 i ISO 8859-1.
Niestety czasami występują problemy z kodowaniem tekstów. Przykład:
„Ss” w „Fußball” powinien wyglądać następująco w mojej bazie danych: „Ÿ”. Jeśli jest to „Ÿ”, jest wyświetlane poprawnie.
Czasami „ß” w „Fußball” wygląda następująco w mojej bazie danych: „ߟ”. Oczywiście jest to wyświetlane nieprawidłowo.
W innych przypadkach „ß” jest zapisywane jako „ß” - więc bez żadnych zmian. Następnie jest wyświetlany niepoprawnie.
Co mogę zrobić, aby uniknąć przypadków 2 i 3?
Jak mogę ustawić to samo kodowanie, najlepiej UTF-8? Kiedy muszę użyć utf8_encode()
, kiedy muszę użyć utf8_decode()
(jasne jest, jaki jest efekt, ale kiedy muszę użyć funkcji?) I kiedy nie mogę nic zrobić z danymi wejściowymi?
Jak sprawić, by wszystko było tak samo kodujące? Być może z funkcją mb_detect_encoding()
? Czy mogę napisać dla tego funkcję? Więc moje problemy to:
- Jak dowiedzieć się, jakiego kodowania używa tekst?
- Jak przekonwertować go na UTF-8 - bez względu na stare kodowanie?
Czy taka funkcja działałaby?
function correct_encoding($text) {
$current_encoding = mb_detect_encoding($text, 'auto');
$text = iconv($current_encoding, 'UTF-8', $text);
return $text;
}
Testowałem to, ale to nie działa. Co jest z tym nie tak?