2012-06-19 20 views
14

私は、正式にiso-8859-1文字エンコーディングを使用したサイトを再コーディングする最後の段階にありますが、現在はUTF-8です。UTF8の特殊文字mailto:件名=リンクとOutlook

問題は、特殊文字が使用されている場合、mailtohrefリンクの件名セクションがOutlookと連携していないことです。私はリンクがクリックされ、Outlookで新しいメールウィンドウがポップアップしたときに明らかな文字エンコーディングの問題を示す通常の文字化け表現を得ます。

私はTHS問題を解決するためにrawurlencode()を試してみたが、これはOutlookが別のエンコーディングを主張しなければならない...

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

がそれでは考えて、Outlookと動作するようには思えない、と試してみました最初に対象文字列を解読するutf-8 ...

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

ビンゴ!素晴らしいOutlookが動作します。しかし、今、他のすべて:(

私はすべてのメールクライアントaccross機能するソリューションを見つけることができません。ページ全体がISO-8859-1に表示されたときに

それはすべてのメールクライアント間でうまく働いたに失敗しました。しかし、ページのコンテンツは、UTF-8でないとき。

残念ながら、クライアントはその下に直接機能メールフォームを持つにもかかわらず、このダイレクトメールのリンクを保持したい!

これまで幸せな解決策はありますか?

+1

をまたは7ビットASCIIのスーパーセットを使用していない場合はBase64のB変種)。 MIME RFCを参照してください。 – ninjalj

+0

私はQの変形が使用されていると思います。 "véhicule"という単語はmailtoリンクのURLで "v%C3%A9hicule"に変換されます。それはURLなので、メールクライアントの "v = C3 = A9hicule"と同じです。しかし、Outlookに到達すると正しく表示されません。 これは、Outlookがiso-8859-1エンコードを期待しているからです(「é」は「= E9」となりますが、他のすべてのクライアントでは動作しません)。 – Richt222

答えて

9

あなたはUTF-8を使用する場合は、この試してください:あなたは(「対象」のヘッダーで使用するための引用印刷可能のQバリアントをしたい

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

あなたは以下Oチェック

IE Viewの

1)HTMLコード

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

2)ブラウザの設定 - >エンコード - >ユニコード(UTF-8)

3)コンテンツタイプ/ MIMEタイプ"application/x-www-form-urlencoded"

+0

1と2の両方が肯定的です。なぜコンテンツが/ MIMEタイプに設定されるべきですか?それはフォームではないので、私は少し混乱しています。 – Richt222

0

エンコードを指定すると、電子メールヘッダーには適用されないため、件名が文字化けすることがあります。あなたの件名は電子メールのヘッダーにあります。ここでは、件名の行にUTF8エンコーディングを適用する機能があります:

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 . "?="; 
}