2012-06-19 13 views
14

Jestem w ostatnim etapie ponownego kodowania strony, która formalnie używa kodowania znaków iso-8859-1, ale teraz jest w UTF-8.Znaki specjalne w UTF8 mailto: subject = link i Outlook

Problem polega na tym, że sekcja tematu linku mailto href nie działa z programem Outlook, gdy używane są znaki specjalne. Dostaję zwykłe zniekształcone reprezentacje postaci, wskazujące na oczywisty problem z kodowaniem znaków po kliknięciu łącza i pojawieniu się nowego okna poczty w programie Outlook.

Próbowałem rawurlencode(), aby rozwiązać problem ths, ale to nie wydają się działać z Outlook ...

<a href="mailto:[email protected]?subject=<?=rawurlencode($subj);?>">send email</a> 

Więc pomyślałem, Outlook musi nalegać na innym kodowaniu i spróbował utf-8 najpierw dekodowanie tematu ...

<a href="mailto:[email protected]?subject=<?=rawurlencode(utf8_decode($subj));?>">send email</a> 

Bingo! Działa świetnie Outlook. Ale teraz nie we wszystkim innym :(

nie mogę znaleźć rozwiązanie, które działa po drugiej stronie wszystkich klientów pocztowych.

to działało dobrze na wszystkich klientów poczty, kiedy cała strona została wyświetlona w iso-8859-1. ale nie wtedy, gdy zawartość strony jest UTF-8.

Niestety klient chce zachować to bezpośredni odnośnik email, mimo funkcjonującego formularza poczty bezpośrednio pod nim!

Czy jest zadowolony rozwiązaniem tego problemu?

+1

Chcesz wariant Q cytowanej do druku do wykorzystania w nagłówkach „osobnik” (lub wariant B Base64, jeśli nie używa się zestawu 7-bitowego ASCII). Zobacz specyfikacje RFC MIME. – ninjalj

+0

Myślę, że jest używany wariant Q. Słowo "véhicule" jest konwertowane na "v% C3% A9hicule" w adresie URL mailto. Ponieważ jest to adres URL, oznaczałoby to "v = C3 = A9hicule" na kliencie poczty. Ale nie wyświetla się poprawnie po przejściu do Outlooka. Myślę, że to dlatego, że Outlook spodziewa się kodowania iso-8859-1 (gdzie "é" będzie "= E9" .Ale to nie zadziała na wszystkich innych klientach. – Richt222

Odpowiedz

9

Jeśli używasz UTF-8 spróbuj tego:

<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?> 
-1

Potrzebujesz t o sprawdzenie następujących

1) Kod HTML

<meta contentType="text/html; charset=UTF-8"/> 

2) Ustawienie Przeglądarka IE Widok -> Kodowanie -> Unicode (UTF-8)

3) Rodzaj Content/MIME Type powinno być "application/x-www-form-urlencoded"

+0

1 i 2 są dodatnie. nie jestem pewien co do 3. Dlaczego lub co powinno być ustawione na ten typ zawartości/MIME? To nie jest forma, więc jestem nieco zdezorientowany. – Richt222

0

Powód, dla którego wiersz tematu jest czasem zniekształcony, jest taki, że gdy określasz kodowanie, nie ma ono zastosowania do nagłówka wiadomości e-mail. Twój temat znajduje się w nagłówku wiadomości e-mail. Oto funkcja stosuje kodowanie UTF-8 na temacie:

function EncodeSubject($_subject) 
{ 
    $encodedSubject = str_replace("&quot;", '"', $_subject); 
    $encodedSubject = preg_replace('/[^x09\x20-\x3C\x3E-\x7E]/e', 'sprintf("=%02X", ord("$0"));', $encodedSubject); 
    $encodedSubject = str_replace(' ', '_', $encodedSubject); 
    return ="?utf-8?q" . $encodedSubject . "?="; 
}