15

私は、iso-8859-1文字エンコードを正式に使用していたサイトを再コーディングする最終段階にありますが、現在は全体がUTF-8です。

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

この問題を修正するためにrawurlencode()を試しましたが、これはOutlookでは機能しないようです...

<a href="mailto:blah@blah.com?subject=<?=rawurlencode($subj);?>">send email</a>

そこで、Outlookは別のエンコーディングを主張する必要があり、最初に件名の文字列をutf-8でデコードしようとしました...

<a href="mailto:blah@blah.com?subject=<?=rawurlencode(utf8_decode($subj));?>">send email</a>

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

すべてのメールクライアントで機能するソリューションが見つかりません。

ページ全体がiso-8859-1で表示された場合、すべてのメールクライアントで正常に機能しました。ただし、ページのコンテンツがutf-8の場合はそうではありません。

残念ながら、クライアントは、そのすぐ下に機能するメールフォームがあるにもかかわらず、この直接の電子メールリンクを保持したいと考えています。

これに対する幸せな解決策はありますか?

4

3 に答える 3

10

utf-8を使用する場合は、次のことを試してください。

<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?>
于 2012-07-26T14:26:32.373 に答える
1

件名が文字化けすることがある理由は、エンコーディングを指定すると、電子メールヘッダーには適用されないためです。件名はメールヘッダーにあります。件名に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 . "?=";
}
于 2012-07-16T19:12:53.800 に答える
-1

以下を確認する必要があります

1)HTMLコード

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

2)IEビューのブラウザ設定->エンコーディング-> Unicode(UTF-8)

3)コンテンツタイプ/MIMEタイプは「application/x-www-form-urlencoded」である必要があります

于 2012-06-20T05:36:41.867 に答える