imap_utf7_encode

(PHP 4, PHP 5, PHP 7)

imap_utf7_encodeISO-8859-1 文字列を修正版 UTF-7 テキストに変換する

説明

string imap_utf7_encode ( string $data )

data を修正版 UTF-7 テキストに変換します。

この関数は、ある種の非 ASCII 文字を含むメールボックス名をエンコード する際に必要となります。

パラメータ

data

ISO-8859-1 文字列。

返り値

data を修正版 UTF-7 でエンコードした文字列を返します。 このエンコーディングについては » RFC 2060, section 5.1.3 で定義されています (元の UTF-7 は » RFC1642 で定義されています)。

参考

  • imap_utf7_decode() - 修正版 UTF-7 エンコードされた文字列をデコードする

add a note add a note

User Contributed Notes 4 notes

up
2
marcelo at maccoy dot com dot br
12 years ago
<?php
/**
* @return encoded string
* @param string $str       
* @desc Convert str to UTF-7 imap default mailbox names
    (the imap_utf7_encode don t built the same result)
*/
function getEncodedUtf7($str){
    if(!
$str){
       echo
"error: you need to give a string parameter.";
       return
false;                       
    }
# change spaces by entropy because mb_convert fail with spaces
   
$str=ereg_replace(" ","xyxy",$str);               
# if mb_convert work
   
if($str=mb_convert_encoding($str,"UTF-7")){
       
# change characters
           
$str=preg_replace("/\+A/","&A",$str);
       
# change to spaces again
           
$str=preg_replace("/xyxy/"," ",$str);                       
       
# return encoded string
           
return $str;
# else
   
}else{
       
# print error and return false
           
echo "error: is not possible to encode this string '$str'.[".
           
imap_last_error().
           
"]";
            return
false;                     
    }                
}
?>
up
1
Anonymous
12 years ago
Note that php4 (4.4.0) will encode IMAP folders in a way that no other program will be able to decode them back.
$ php4 <<EOF
> <?php
> echo "ENCODED: " . imap_utf7_encode("") . "\\n";
>
?>
> EOF
ENCODED: &w5w-

Now try to decode the result string ("&w5w-") using e.g. javamail or python's imaplib, or if you don't like these languages - create an IMAP folder using PHP and try to display it in an IMAP client (mutt, thunderbird, outlook, whatever...)
up
0
dn at dnunes dot com
10 years ago
Maccoy function's isn't reliable 'cause it doesn't follow the RFC 2060. It will work fine for most latin chars (which, in base64, will turn into "+A..."), but for other language it can make a big mess. If you're using an internationalizated system, try using the other presented options.
up
-1
Anonymous
11 years ago
This encoding will not work for cyrus imapservers and you might have problems with other mail clients.
Use mb_convert_encoding($str, "UTF7-IMAP","ISO-8859-15") instead.

ps: mb_convert_encoding() requires   building php with  --enable-mbstring option
To Top