[PHP] Jak odkodować tekst w postaci "oto =BF=F3=B3w...", czyli zakodowany w standardzie quoted printable?
Chcesz odkodować tekst zawierający znaki złożone z kodów szesnastkowych poprzedzonych znakami równości, czyli zamienić tekst zakodowany w standardzie quoted printable na czytelny dla człowieka.
Bardzo często zachodzi konieczność zakodowania tekstu do standardu quoted printable, ponieważ wiele znaków (w tym polskie znaki narodowe) mogłby powodować problemy podczas przesyłania ich w systemach wykorzystujących np. 7-bitowe kodowanie. Stąd najczęściej spotkasz się z takim kodowaniem w poczcie elektronicznej.
Co zrobić aby odczytać dziwny ciąg znaków, wyglądających mniej więcej tak: "oto =BF=F3=B3w..." lub "=?ISO-8859-2?Q?=AFyczenia =A6wi=B1teczne?=". Jest na to prosty sposób...
Za pomocą funkcji quoted_printable_decode() odkodujmy pierwszy ciąg znaków:
<?
echo quoted_printable_decode("oto =BF=F3=B3w...");
?>
wynik: oto żółw...
Sprawdźmy co stanie się z drugim przykładem:
<?
echo quoted_printable_decode("=?ISO-8859-2?Q?=AFyczenia =A6wi=B1teczne?=");
?>
wynik: =?ISO-8859-2?Q?Życzenia Świąteczne?
Nie poszło zbyt dobrze, ponieważ prawdziwy ciąg znaków to "Życzenia Świąteczne" i nic więcej. Błąd wynika ze sposobu kodowania znaków w e-mailach. O ile z normalnym kodowaniem funkcja radzi sobie dobrze, to przy dodatkowych znakach sterujących, stosowanych w poczcie elektronicznej ma problemy.
Na początku i na końcu tematu w listach dodawane są znaki =? i ?=. Na początku dodawana jest również informacja o standardzie kodowania polskich znaków ISO-8859-2?Q?. Wystarczy wyciąć te informacje:
<?
$temat = "=?ISO-8859-2?Q?=AFyczenia =A6wi=B1teczne?=";
$temat = ereg_replace("^=\?","",$temat);
$temat = ereg_replace("\?=$","",$temat);
$temat = ereg_replace("ISO-8859-2\?Q\?","",$temat);
echo quoted_printable_decode($temat);
?>
wynik: Życzenia Świąteczne
Teraz działa poprawnie. W razie potrzeby można odczytać standard kodowania i przekonwertować ciąg znaków na inny standard polskich liter. Jeżeli chcesz dokładnie zgłębić sposoby kodowania quoted printable zapoznaj się z dokumentem RFC 2045