[英]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.