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