RFC-2047-Wandler

Thursday, May 8, 2003 3:25:54 PM

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
    );
  }

Written by Shred in Blog1 comment

Tags: PHP, RFC, Snippet

Show 1 comment...

Danke für das Snippet, genau das was ich brauch!
Gibt es so eine Funktion etwa nicht bei den PHP-Mail-/IMAP-Funktionen?

mk90 Nov 27, 2006 7:42:25 PM
For the Gravatar icon. Will not be shown.
No HTML. No spam. Please be polite.
  Please click on the 'X' for submission: