On Sun, 2004-11-07 at 13:57 +0200, Marina Markus wrote:
> Hello,
Hi!
> I need a PHP script to create an email message in a way that a subject line
> in Hebrew will be readable in all mail clients. Some mail clients cannot
> cope with Hebrew if they don't have character set explicitly denoted.
I believe that should be _all_ e-mail clients. Since the default MIME
charset is US-ASCII (as per RFC 2047 and 2822), only faulty e-mail
clients would be able to cope with non-ASCII characters without wrapping
the header in MIME.
> Is there a possibility in PHP allowing to encode a string
> with WIN-1255 character set encoding? The result should look like:
>
> =?windows-1255?B?Rlc6IOz26eHl+CDk8uXj6e0=?=
>
> which the mail client then is able to decode back into Hebrew.
If you're running PHP5, you might want to look at iconv_mime_encode. If
not, you can take these functions, which are from a GPL:d webmail I'm
writing, and adapt them to your purpose:
function mimifyhdr($header)
{
if(strpos($header, " ") !== FALSE)
{
$temp = "";
$cp = 0;
while(($np = strpos($header, " ", $cp)) !== FALSE)
{
$temp .= mimifyhdr(substr($header, $cp, $np - $cp)) . " ";
$cp = $np + 1;
}
$temp .= mimifyhdr(substr($header, $cp));
return($temp);
}
$nh = "";
$num = 0;
for($i = 0; $i < strlen($header); $i++)
{
$c = substr($header, $i, 1);
if(ord($c) >= 128)
$num++;
}
if($num == 0)
return($header);
if($num > (strlen($header) / 4))
return("=?UTF-8?B?" . encodemime($header, "base64") . "?=");
$nt = "";
for($i = 0; $i < strlen($header); $i++)
{
$c = substr($header, $i, 1);
if(($c == "=") || (ord($c) >= 128) || ($c == "_"))
{
$nt .= "=" . strtoupper(dechex(ord($c)));
} else if($c == " ") {
$nt .= "_";
} else {
$nt .= $c;
}
}
return("=?UTF-8?Q?" . $nt . "?=");
}
function addhdr($name, $val)
{
global $headers;
if(trim($val) != "")
{
$temp .= $name . ": " . mimifyhdr($val);
$maxlen = strlen($temp);
$ls = 0;
while($maxlen > 70)
{
$cp = $ls + 70;
while(strpos("\t ", substr($temp, $cp, 1)) === FALSE)
{
if(--$cp < $ls)
break;
}
if($cp < $ls)
break;
$temp = substr($temp, 0, $cp) . "\r\n\t" .
substr($temp, $cp+ 1);
$ls = $cp + 3;
$maxlen = strlen($temp) - $ls;
}
$headers .= $temp . "\r\n";
}
}
Note that they take values which are already in the UTF-8 encoding. If
your values aren't in UTF-8, take a look at the iconv function.
> If anyone has a solution for another character set, I suppose it can also
> help.
I'd recommend that you use UTF-8 instead. It's more general than
Windows-1255 (copes with characters outside the Hebrew range), and is
probably supported by more MUAs.
Hope it helps!
Fredrik Tolf
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php