Dieser Codeschnippsel wandelt einen String nach RFC-2047 um.
Die RFC-2047 wird verwendet, um Umlaute in Mail- und News-Headern darzustellen. Die folgenden beiden Funktionen wandeln einen String entsprechend um.
/**
* Converts the passed string to an RFC-2047 encoded word.
*
* The string will always be converted. This function also takes care of
* proper wrapping.
*
* @param $str String to be encoded
* @param $encode The character set to be used (e.g. "ISO-8859-1")
* @return Converted string
*/
function rfc2047conv($str, $encode) {
if(!strlen($str)) return "";
$result = "=?${encode}?Q?";
$intro = strlen($result);
$charcnt = $intro;
for($ix=0; $ix < strlen($str); $ix++) {
if($charcnt > 70) {
$result .= "?=\r\n =?${encode}Q?";
$charcnt = $intro;
}
$chr = $str{$ix};
if($chr=='?' || $chr=='_' || $chr=='=' || $chr<' ' || $chr>'~' ) {
$result .= sprintf("=%02X", ord($chr));
$charcnt+=3;
}else {
$result .= ($chr==' ' ? "_" : $chr);
$charcnt++;
}
}
$result .= "?=";
return $result;
}
/**
* This function will only encode the shortest required section of
* the string. If there are no characters in the string that need to
* be encoded, the string will be returned unaltered.
*
* WARNING: Even though most mail clients can handle the result, it
* is not RFC compliant!
*
* @param $str String to be encoded
* @param $encode The character set to be used
* @return Converted string
*/
function rfc2047short($str, $encode) {
return preg_replace(
'/^([ -~]*)(.*?)([ -~]*)$/e',
'"$1".rfc2047conv("$2",$encode)."$3"',
$str
);
}