2013-06-19 42 views
1

我正在使用PHP imap從收件箱中讀取電子郵件。它從標題中提取一些信息。一個集流管的看起來像這樣:解碼UTF-8編碼頭文件

X-MY-定製部首:= UTF-8乙RXVnZW4gQmFiacSH =

該編碼的字符串的原始值是歐根巴比奇????。

當我嘗試使用PHP解碼該字符串時,我無法弄清楚它的正確性,這個問題總是回來了。

我試過imap_utf8,imap_mime_header_decode和其他一些我不能完全記得的。他們要麼根本不返回任何東西,要麼就像我之前提到的那樣搞砸了。

什麼是正確的解碼方式?

+0

如何是重音下,在您的編碼的字符串進入? –

+0

你能詳細解釋一下嗎?我不確定'你輸入的編碼字符串'是什麼意思。 我沒有自己編碼字符串,我認爲它是通過發送電子郵件來完成的。 –

+0

對不起,我的意思是,重音c最初是怎麼進入的?根據維基百科:Unicode代碼點是ć的U + 0107。是否使用此代碼輸入,是否使用Microsoft字詞快捷鍵輸入(這些字符總是被其他程序嚴重對待),是否使用波蘭語鍵盤上的鍵輸入? –

回答

1

這就是你做錯了:你是HTML(由PHP生成)不是UTF-8編碼。所以,即使它返回重音c,頁面也不能正確顯示。

要修復它,在你<head>標籤補充一點:

<meta http-equiv='Content-Type' content='text/html; charset=utf-8'> 
+0

發送Content-Type HTTP標頭中的字符集優於使用元標記。 – Joni

2

imap_utf8 and imap_mime_header_decode work just fine;這裏還有iconv_mime_decode

php > echo imap_utf8('X-My-Custom-Header: =?UTF-8?B?RXVnZW4gQmFiacSH?='), "\n"; 
X-My-Custom-Header: Eugen Babić 

php > list($k,$v) = imap_mime_header_decode('X-My-Custom-Header: =?UTF-8?B?RXVnZW4gQmFiacSH?='); 
php > echo $v->text, "\n"; 
Eugen Babić 

php > echo iconv_mime_decode('X-My-Custom-Header: =?UTF-8?B?RXVnZW4gQmFiacSH?=', 0, "utf8"), "\n"; 
X-My-Custom-Header: Eugen Babić 

看來,imap_utf8返回其在NFD輸出,使口音在c可在一些環境中顯得格格不入。

+0

我把一個小腳本放在一個服務器上,這樣你就可以看到輸出(我複製粘貼你的確切示例):http://cameronsflash.com/misc/test.php,你可以看到,c上的口音是在任何情況下都是錯誤的:\ –

+0

在任何情況下,對我來說都很好。你可以做的一件事就是在Content-Type中指定charset:'header('Content-Type:text/html; charset = utf-8')'。目前您已將其設置爲text/html,這意味着瀏覽器必須猜測。您的瀏覽器必須猜錯。 – Joni

0

功能mb_decode_mimeheader()解決了這個問題

  "fromName" => (isset($fromInfo->personal)) 
       ? mb_decode_mimeheader($fromInfo->personal) : "",