簡體   English   中英

使用PHP的電子郵件標頭的UTF-8字符編碼

[英]UTF-8 character encoding for email headers with PHP

我正在嘗試將→(右箭頭, →或unicode 2192十六進制)編碼為電子郵件主題行。

當我使用php的mb_encode_mimeheader()時,當我使用Thunderbird或Gmail做同樣的事情時,我會得到不同的值。 但是當php生成的電子郵件到達時,角色沒有正確顯示。 另外,PHP的mb_decode_mimeheader()適用於PHP的輸出,但不能解碼來自其他電子郵件源的內容。

通過十六進制轉儲,我已經確定了箭頭的UTF-8表示

<?php
$rarr = "\xe2\x86\x92";

mb_encode_mimeheader($rarr, 'UTF-8'); //     =?UTF-8?B?w6LChsKS?=
// whereas Tbird and Gmail produce:          =?UTF-8?B?4oaS?=
// and more manually:
'=?UTF-8?B?' . base64_encode($rarr).'?='; // =?UTF-8?B?4oaS?=

PHP的編碼在Thunderbird和Gmail中出現為:â

我對PHP的行為感到困惑,因為它似乎沒有產生標准結果。

如何讓PHP編碼UTF-8電子郵件頭值,以便郵件客戶端正確解碼?

似乎有一個忽略第二個參數的錯誤,當我添加內部編碼時,我得到了正確的結果:

<?php
$rarr = "\xe2\x86\x92";
mb_internal_encoding( "UTF-8");
echo mb_encode_mimeheader($rarr, 'UTF-8'); //=?UTF-8?B?4oaS?=

<?php
$rarr = "\xe2\x86\x92";

mb_encode_mimeheader($rarr, 'UTF-8'); //=?UTF-8?B?w6LChsKS?=

只需設置內部編碼即可:

<?php
$rarr = "\xe2\x86\x92";
mb_internal_encoding( "UTF-8");
echo mb_encode_mimeheader($rarr); //=?UTF-8?B?4oaS?=

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM