PHP Conference Japan 2024

iconv_mime_decode

(PHP 5, PHP 7, PHP 8)

iconv_mime_decode解碼 MIME 標頭欄位

說明

iconv_mime_decode(字串 $string, 整數 $mode = 0, ?字串 $encoding = null): 字串|false

解碼 MIME 標頭欄位。

參數

字串

已編碼的標頭,以字串形式表示。

mode(模式)

mode 參數決定了當 iconv_mime_decode() 遇到格式錯誤的 MIME 標頭欄位時的行為。您可以指定以下位元遮罩的任意組合。

iconv_mime_decode() 可接受的位元遮罩
常數 說明
1 ICONV_MIME_DECODE_STRICT 如果設定此項,則給定的標頭將完全按照 » RFC2047 中定義的標準進行解碼。此選項預設為停用,因為有許多損壞的郵件使用者代理程式不遵循規範,並且不會產生正確的 MIME 標頭。
2 ICONV_MIME_DECODE_CONTINUE_ON_ERROR 如果設定此項,iconv_mime_decode_headers() 會嘗試忽略任何語法錯誤,並繼續處理給定的標頭。

encoding(編碼)

選用的 encoding 參數指定用於表示結果的字元集。如果省略或設為 null,則會使用 iconv.internal_encoding

返回值

解碼成功時返回已解碼的 MIME 欄位,如果在解碼過程中發生錯誤,則返回 false

更新日誌

版本 說明
8.0.0 encoding 現在可以為 null。

範例

範例 #1 iconv_mime_decode() 範例

<?php
// 結果為 "Subject: Prüfung Prüfung"
echo iconv_mime_decode("Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=",
0, "ISO-8859-1");
?>

參見

新增註釋

使用者貢獻的註釋 3 則註釋

Dirk Becker
11 年前
在建立新的網頁郵件程式時,我必須處理大量的郵件,而其中只有一半是正確編碼的!
通常文字被標記為 ISO,但實際上是 UTF :/

在嘗試了許多解決方案和組合之後,我找到了一種似乎適用於我們所有郵件的方法。也許它對其他人也有用。

<?php

函式 mime_encode($data)
{
$resp = imap_utf8(trim($data));

如果(
preg_match("/=\?/", $resp))
$resp = iconv_mime_decode($data, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, "ISO-8859-15");

如果(
json_encode($resp) == 'null')
$resp = utf8_encode($resp);

返回
$resp;
}

?>
koronci at aol dot com
11 年前
一個簡單可行的解決方案,支援拉丁編碼,適用於斯洛伐克語、捷克語、俄語等。
<?php iconv("utf-8", "windows-1250", $SomeWeirdText); ?>

特別是對於那些與 imap_mime_header_decode 苦苦掙扎的人
dido dot sevilla at gmail dot com
19 年前
在內建 imap_mime_decode 的 PHP 版本中,可以模擬此函式的操作

<?php
函式 iconv_mime_decode($str, $mode=0, $charset="UTF-8")
{
$data = imap_mime_header_decode($str);
如果 (
count($data) > 0) {
// 因為 iconv 不喜歡 charset 的 'default' 值
$charset = ($data[0]->charset == 'default') ? 'ASCII' : $data[0]->charset;
返回(
iconv($charset, $charset, $data[0]->text));
}
返回(
"");
}
?>

我只嘗試使用這個程式碼片段將 ISO-2022-JP 訊息解碼為 UTF-8,但我認為沒有理由在其他情況下無法正常運作。
To Top